Cod sursa(job #2664902)
Utilizator | Data | 29 octombrie 2020 18:17:07 | |
---|---|---|---|
Problema | Cautare binara | Scor | 40 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.16 kb |
#include<fstream>
using namespace std;
int main(){
ifstream in("cautbin.in");
ofstream out("cautbin.out");
long long int n,m,x,y,t=1;
in>>n;
long long int v[n];
while(t*2<=n){
t*=2;
}
for(long long int i=1;i<=n;i++){
in>>v[i];
}
in>>m;
for(long long int i=1;i<=m;i++){
in>>x>>y;
if(x==0){
long long int r=0;
for(long long int i=t;i>0;i/=2){
if(v[r+i]<=y && r+i<=n){
r+=i;
}
}
if(v[r]==y){
out<<r<<'\n';
}else{
out<<"-1"<<'\n';
}
}
if(x==1){
long long int r=0;
for(long long int i=t;i>0;i/=2){
if(v[r+i]<=y && r+i<=n){
r+=i;
}
}
out<<r<<'\n';
}
if(x==2){
long long int r=n+1;
for(long long int i=t;i>0;i/=2){
if(v[r-i]>=y && r-i>0){
r-=i;
}
}
out<<r<<'\n';
}
}
}