Cod sursa(job #1587765)

Utilizator EnsiferumScutaru Paul Alexandru Ensiferum Data 2 februarie 2016 16:14:19
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.62 kb
#include <fstream>

using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");

struct intrebare
{
 int nr,x;
}q[100001];

int main()
{
    int n,m,i,j,a[100001],nr,x;;
    long long st,dr,mij;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>a[i];
    fin>>m;
    for(i=1;i<=m;i++)
        {
        fin>>nr>>x;
    //a
        if(nr==0)
        {
            st=1;
            dr=n;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(a[mij]<=x)
                    st=mij+1;
                else
                    dr=mij-1;
            }
            mij=(st+dr)/2;
            if(a[mij]>x)
                mij--;
            if(a[mij]==x)
                fout<<mij<<endl;
            else
                fout<<-1<<endl;
        }
    //b
        else if(nr==1)
        {
            st=1;
            dr=n;
            while(st<dr)
            {
                mij=(st+dr)/2;
                if(a[mij]<=x)
                    st=mij+1;
                else
                    dr=mij;
            }
            mij=(st+dr)/2;
            if(a[mij]>x)
                mij--;
            fout<<mij<<endl;
        }
    //c
        else if(nr==2)
        {
            st=1;
            dr=n;
            while(st<dr)
            {
                mij=(st+dr)/2;
                if(a[mij]<x)
                    st=mij+1;
                else
                    dr=mij;
            }
            mij=(st+dr)/2;
            if(a[mij]<x)
                mij++;
            fout<<mij;
        }
        }
    return 0;
}