Cod sursa(job #2223898)

Utilizator danielsociuSociu Daniel danielsociu Data 22 iulie 2018 00:10:48
Problema Cautare binara Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
std::ifstream cin("cautbin.in");
std::ofstream cout("cautbin.out");
#define maxn 100010
int n,m,v[maxn],bin;

int main()
{
    int sbin,cer,val,i;
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>v[i];
    for(bin=1;bin<=n;bin <<=1);
    cin>>m;

    for(;m;m--){
        cin>>cer>>val;
        if(cer<2){
            for(sbin=bin,i=0;sbin;sbin>>=1)
                if(i+sbin<=n&&v[i+sbin]<=val)
                    i+=sbin;
            if(!cer&&v[i]!=val)
                cout<<"-1\n";
            else
                cout<<i<<'\n';
            continue;
        }
        for(sbin=bin,i=n;sbin;sbin>>=1)
            if(i-sbin>0&&v[i-sbin]>=val)
                i-=sbin;
        cout<<i<<'\n';
    }
}