Cod sursa(job #1943001)

Utilizator rauliacobanRaul Iacoban rauliacoban Data 28 martie 2017 12:17:43
Problema Cautare binara Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.49 kb
/*
infoarena.ro/problema/cautbin
*/
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

    int v[100005],n;

int cautbin0(int x)
{
    int l=1,r=n,mid,sol=-1;
    while(l<=r)
    {
        mid=(l+r)/2;
        if(x<v[mid])
            l=mid+1;
        else
        {
            if(x>v[mid])
                r=mid-1;
            else
            {
                sol=mid;
                l=mid+1;
            }
        }
    }
    return sol;
}

int cautbin1(int x)
{
    int l=1,r=n,mid,sol=-1;
    while(l<=r)
    {
        mid=(l+r)/2;
        //fout<<l<<" "<<mid<<" "<<r<<endl;
        if(x>=v[mid])
        {
            sol=mid;
            l=mid+1;
        }
        else
            r=mid-1;
    }
    return sol;
}

int cautbin2(int x)
{
    int l=1,r=n,mid,sol=-1;
    while(l<=r)
    {
        mid=(l+r)/2;
        //fout<<l<<" "<<mid<<" "<<r<<endl;
        if(x<=v[mid])
        {
            sol=mid;
            r=mid-1;;
        }
        else
            l=mid+1;
    }
    return sol;
}

int main()
{
    int i,x,m,c;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>c>>x;
        if(c==0)
            fout<<cautbin0(x)<<'\n';
        if(c==1)
            fout<<cautbin1(x)<<'\n';
        if(c==2)
            fout<<cautbin2(x)<<'\n';
    }


    fin.close();
    fout.close();
    return 0;
}