Cod sursa(job #2281351)

Utilizator pasoi_stefanPasoi Stefan pasoi_stefan Data 12 noiembrie 2018 08:36:12
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include<fstream>
using namespace std;
ifstream cin("cautbin.in");
ofstream cout("cautbin.out");
int n,m,a[100005],S,c,x;
int cb0(int x){
    int step=S,i=0;
    while(step>0){
        if(i+step<=n && a[i+step]<=x)
            i+=step;
        step>>=1;
    }
    if(a[i]==x) return i;
    else return -1;
}
int cb1(int x){
    int step=S,i=0;
    while(step>0){
        if(i+step<=n && a[i+step]<=x)
            i+=step;
        step>>=1;
    }
    return i;
}
int cb2(int x){
    int step=S,i=0;
    while(step>0){
        if(i+step<=n && a[i+step]<x)
            i+=step;
        step>>=1;
    }
    return i+1;
}
int main(){
    cin>>n;
    for(S=1;S<=n;S<<=1);
    for(int i=1;i<=n;i++)
        cin>>a[i];
    cin>>m;
    while(m--){
        cin>>c>>x;
        if(c==0) cout<<cb0(x)<<'\n';
        else if(c==1) cout<<cb1(x)<<'\n';
        else cout<<cb2(x)<<'\n';
    }
}