Cod sursa(job #1587759)

Utilizator EnsiferumScutaru Paul Alexandru Ensiferum Data 2 februarie 2016 16:08:51
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 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];
    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>>q[i].nr>>q[i].x;
    //rezolvare
    //a
    for(i=1;i<=m;i++)
        if(q[i].nr==0)
        {
            st=1;
            dr=n;
            while(st<=dr)
            {
                mij=(st+dr)/2;
                if(a[mij]<=q[i].x)
                    st=mij+1;
                else
                    dr=mij-1;
            }
            mij=(st+dr)/2;
            if(a[mij]>q[i].x)
                mij--;
            if(a[mij]==q[i].x)
                fout<<mij<<endl;
            else
                fout<<-1<<endl;
        }
    //b
        else if(q[i].nr==1)
        {
            st=1;
            dr=n;
            while(st<dr)
            {
                mij=(st+dr)/2;
                if(a[mij]<=q[i].x)
                    st=mij+1;
                else
                    dr=mij;
            }
            mij=(st+dr)/2;
            if(a[mij]>q[i].x)
                mij--;
            fout<<mij<<endl;
        }
    //c
        else if(q[i].nr==2)
        {
            st=1;
            dr=n;
            while(st<dr)
            {
                mij=(st+dr)/2;
                if(a[mij]<q[i].x)
                    st=mij+1;
                else
                    dr=mij;
            }
            mij=(st+dr)/2;
            if(a[mij]<q[i].x)
                mij++;
            fout<<mij;
        }
    return 0;
}