Cod sursa(job #2458121)

Utilizator AsthenichDog390Alex Preda AsthenichDog390 Data 19 septembrie 2019 18:27:55
Problema Cautare binara Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.88 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int v[100001];
int cautbin(int start,int stop,int termen)
{
    bool ok=0;
    int poz=-1,mid;
    while(!ok&&start<=stop)
    {
        mid=(start+stop)/2;
        if(v[mid]==termen)
        {
            poz=mid;
            ok=1;
        }
        else if(v[mid]>termen)
        stop=mid-1;
        else
        start=mid+1;
    }
    return poz;
}
int main()
{
    int n,m,i,j;
    in>>n;
    for(i=0;i<n;i++)
    in>>v[i];
    in>>m;
    int a,b,poz;
    for(j=1;j<=m;j++)
    {
        in>>a>>b;
        if(a==0)
        {
            poz=cautbin(0,n-1,b);
            while(v[poz+1]==v[poz])
            {
                poz++;
            }
            if(poz!=-1)
            out<<poz+1<<'\n';
            else
            out<<-1<<'\n';
        }
        if(a==1)
        {
            poz=cautbin(0,n-1,b);
            while(v[poz+1]==v[poz])
            {
                poz++;
            }
            if(poz==-1)
            {
                poz=0;
                while(v[poz]<b &&poz<n)
                {
                    poz++;
                }
                out<<poz<<'\n';

            }
            else
            out<<poz+1<<'\n';
        }
        if(a==2)
        {
            poz=cautbin(0,n-1,b);
            while(v[poz-1]==v[poz])
            {
                poz--;
            }
            if(poz==-1)
            {
                poz=0;
                while(poz<b&&poz<n)
                {
                    if(v[poz]>b)
                    {
                        out<<poz+1<<'\n';
                        break;
                    }
                    poz++;
                }
            }
            else
            out<<poz+1<<'\n';
        }
    }
    return 0;
}