Cod sursa(job #2436631)

Utilizator baragan30Baragan Andrei baragan30 Data 6 iulie 2019 15:10:26
Problema Cautare binara Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>

#define poz v[(x+y)/2]
#define def unsigned long long

using namespace std;
ifstream in("cautbin.in");
ofstream out("cautbin.out");
def v[100001],n,m;
int binara(int x,int y,def nr){
    if(y-x==1){
            if(v[x]==nr)return x;
            return y;
    }
if(poz<nr)return binara((x+y)/2,y,nr);
return binara(x,(x+y)/2,nr);

}
int main(){
    def x,y;
in>>n;
for(int i=1;i<=n;i++)in>>v[i];
in>>m;
for(int i=1;i<=m;i++){
    in>>x>>y;
    if(x==0){
        int k=binara(1,n,y+1);
        if(v[k-1]==y)out<<k-1<<'\n';
        else if(v[k]==y)out<<k<<'\n';
        else out<<"-1"<<'\n';
    }
    else{ if(x==1){
            if(v[n]<=y)out<<n<<'\n';
    else
        out<<binara(1,n,y+1)-1<<'\n';
    }
    else out<<binara(1,n,y)<<'\n';
 }
}
return 0;
}