Pagini recente » Borderou de evaluare (job #371569) | Cod sursa (job #3208610) | Cod sursa (job #2981203) | Cod sursa (job #1891581) | Cod sursa (job #2342659)
#include<fstream>
#include<algorithm>
using namespace std;
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int n,M,stanga,putere,x,y;
int v[100010];
int main(){
fin>>n;
for(int i=1;i<=n;i++)
fin>>v[i];
sort(v+1,v+n+1);
fin>>M;
for(int m=1;m<=M;m++){
fin>>x>>y;
if(x==0){
stanga=0;
putere=(1<<20);
while(putere){
if(stanga+putere<=n){
if(y>=v[stanga+putere]){
stanga+=putere;
putere/=2;
}
else{
putere/=2;
}
}
else
putere/=2;
}
if(v[stanga]==y)
fout<<stanga<<"\n";
else
fout<<-1<<"\n";
}
if(x==1){
stanga=0;
putere=(1<<20);
while(putere){
if(stanga+putere<=n){
if(v[stanga+putere]<=y){
stanga+=putere;
putere/=2;
}
else
putere/=2;
}
else
putere/=2;
}
fout<<stanga<<"\n";
}
if(x==2){
stanga=0;
putere=(1<<20);
while(putere){
if(stanga+putere<=n){
if(v[stanga+putere]>=y)
putere/=2;
else{
stanga+=putere;
putere/=2;
}
}
else
putere/=2;
}
fout<<stanga+1<<"\n";
}
}
return 0;
}