Cod sursa(job #2664898)
Utilizator | Data | 29 octombrie 2020 17:56:39 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | cpp-64 | Status | done |
Runda | Arhiva educationala | Marime | 1.11 kb |
#include<iostream>
long long int v[100001];
using namespace std;
int main(){
long long int n,m,x,y,t=1;
cin>>n;
while(t*2<=n){
t*=2;
}
for(long long int i=1;i<=n;i++){
cin>>v[i];
}
cin>>m;
for(long long int i=1;i<=m;i++){
cin>>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){
cout<<r<<'\n';
}else{
cout<<"-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;
}
}
cout<<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;
}
}
cout<<r<<'\n';
}
}
}