Pagini recente » Cod sursa (job #1255990) | Profil M@2Te4i | Cod sursa (job #484554) | Cod sursa (job #2435645) | Cod sursa (job #2436631)
#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;
}