Pagini recente » Cod sursa (job #862139) | Cod sursa (job #927362) | Cod sursa (job #2726296) | Cod sursa (job #2566675) | Cod sursa (job #779696)
Cod sursa(job #779696)
#include <stdio.h>
#define NMax 100010
const char IN[]="cautbin.in",OUT[]="cautbin.out";
int N,M;
int v[NMax];
int search(int x){
int step,i;
for (step=1;step<=N;step<<=1);
for (i=0;step;step>>=1)
if (i+step<=N && v[i+step]<=x)
i+=step;
return i;
}
int search2(int x){
int step,i;
for (step=1;step<=N;step<<=1);
for (i=N+1;step;step>>=1)
if (i-step>0 && v[i-step]>=x)
i-=step;
return i;
}
int main()
{
int i,c,x,poz;
freopen(IN,"r",stdin);
scanf("%d",&N);
for (i=1;i<=N;++i) scanf("%d",v+i);
scanf("%d",&M);
freopen(OUT,"w",stdout);
while (M--)
{
scanf("%d%d",&c,&x);
if (c==0)
{
poz=search(x);
printf("%d\n",v[poz]==x && 0<poz && poz<=N ? poz : -1);
}
else if (c==1) printf("%d\n",search(x));
else printf("%d\n",search2(x));
}
fclose(stdout);
fclose(stdin);
return 0;
}