Pagini recente » Cod sursa (job #33849) | Cod sursa (job #1079543) | Autentificare | Cod sursa (job #1206232) | Cod sursa (job #792183)
Cod sursa(job #792183)
#include <cstdio>
int N,M;
int v[100100];
void bs(int val) {
int i, step;
for (step=1; step<N; step<<=1);
for (i=0; step; step>>=1)
if (i+step<N && v[i+step]<=val)
i+=step;
if (v[i]!=val)
printf("-1\n");
else printf("%d\n",i+1);
}
void bs2(int val) {
int i,step;
for (step=1; step<N; step<<=1);
for (i=N-1; step; step>>=1)
if (i-step>=0 && v[i-step]>=val)
i-=step;
printf("%d\n",i+1);
}
int main () {
int type, val;
freopen("cautbin.in","rt",stdin);
freopen("cautbin.out","wt",stdout);
scanf("%d",&N);
for (int i=0; i<N; scanf("%d",&v[i]), ++i);
scanf("%d",&M);
for (; M>0; --M) {
scanf("%d %d\n", &type, &val);
switch (type) {
case 0: case 1: bs(val); break;
case 2: bs2(val); break;
}
}
return 0;
}