Pagini recente » Cod sursa (job #676273) | Cod sursa (job #683021) | Cod sursa (job #2268996) | Cod sursa (job #530293) | Cod sursa (job #199211)
Cod sursa(job #199211)
#include <cstdio>
int t,x,n,v[100000];
int search3(){
long p=1,u=n,m;
while (u-p>1){
m=(p+u)/2;
/*if (v[m]==x)
return m;
if (v[m]>x)
u=m;*/
if (v[m]>=x){
p=m-1;
u=m;
}
else
p=m;
}
if (v[u]==x)
return u;
if (v[p]==x)
return p;
return u;
}
int search2(){
long p=1,u=n,m;
while (u-p>1){
m=(p+u)/2;
if (v[m]<=x){
u=m+1;
p=m;
}
else
u=m-1;
}
if (v[p]==x)
return p;
if (v[u]==x)
return u;
return p;
}
int search1(){
long p=1,u=n,m;
while (u!=p){
m=(p+u)/2;
if (v[m]==x)
return m;
if (v[m]>x)
u=m;
if (v[m]<x)
p=m+1;
}
return -1;
}
void write(int i){
printf("%d\n",i);
}
void read(){
scanf("%d%d",&t,&x);
if (t==0)
write(search1());
else if (t==1)
write(search2());
else if (t==2)
write(search3());
}
int main(){
int i,m;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;++i)
scanf("%d",&v[i]);
scanf("%d",&m);
for (i=1;i<=m;++i){
read();
//write(solve());
}
}