Cod sursa(job #1312505)

Utilizator donjuanDon Juan donjuan Data 9 ianuarie 2015 17:09:19
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <fstream>
using namespace std;
int a[100002],stg,mij,dr,n,m,i,x,p;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int main()
{
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>a[i];
    fin>>m;
    for(i=1;i<=m;i++)
    {
        fin>>p>>x;
        dr=n;
        stg=1;
        while(stg<=dr)//alta greseala <
        {
            mij=(stg+dr)/2;
            if(a[mij]>x)
                dr=mij-1;
            else
            if(a[mij]<x)
                stg=mij+1;
            else
            if(a[mij]==x)//o grseala un=
                break;
        }
        if(p==0)
        {
            if(x==a[mij])
            {
                while(a[mij]==a[mij+1])
                    mij++;
                fout<<mij<<"\n";
            }
            else
                fout<<"-1\n";
        }
        else
        if(p==1)
        {
            while(a[mij]==a[mij+1])
                mij++;
            fout<<mij<<"\n";
        }
        else
        if(p==2)
        {
            if(x!=a[mij])
                mij++;
            while(a[mij]==a[mij-1])
                mij--;
            fout<<mij<<"\n";
        }
    }
    return 0;
}