Cod sursa(job #2585586)

Utilizator GligarEsterabadeyan Hadi Gligar Data 19 martie 2020 10:43:50
Problema Cautare binara Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;

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

const int nmax=100000;

int v[nmax+1];

int main(){
    int n;
    fin>>n;
    for(int i=1;i<=n;++i){
        fin>>v[i];
    }
    int n2=1;
    while(n2<=n){
        n2*=2;
    }
    n2/=2;
    int m;
    fin>>m;
    for(int im=1;im<=m;++im){
        int x,y;
        fin>>x>>y;
        if(x==0){
            int sol=0;
            for(int i=n2;i>0;i/=2){
                if(sol+i<=n&&v[sol+i]<=y){
                    sol+=i;
                }
            }
            if(v[sol]==y){
                fout<<sol<<"\n";
            }else{
                fout<<"-1\n";
            }
        }else if(x==1){
            int sol=0;
            for(int i=n2;i>0;i/=2){
                if(sol+i<=n&&v[sol+i]<=y){
                    sol+=i;
                }
            }
            fout<<sol<<"\n";
        }else {
            int sol=n+1;
            for(int i=n2;i>0;i/=2){
                if(sol-i>=1&&v[sol-i]>=y){
                    sol-=i;
                }
            }
            fout<<sol<<"\n";
        }
    }

    return 0;
}