Pagini recente » Cod sursa (job #2603246) | Cod sursa (job #1754120) | Cod sursa (job #2654729) | Cod sursa (job #1334691) | Cod sursa (job #256707)
Cod sursa(job #256707)
#include <cstdio>
int N, M, a[100001], Npow=1;
int bsearch (int x)
{
int trep=0;
for (int step=Npow; step; step>>=1)
if (trep+step <= N && a[trep+step] <= x)
trep+=step;
return trep;
}
int main ()
{
freopen ("cautbin.in","r",stdin);
frepen ("cautbin.out","w",stdout);
scanf ("%d", &N);
for (int i=1; i<=N; ++i)
scanf ("%d", &a[i]);
while (Npow<<1 <= N) Npow<<=1;
scanf ("%d", &M);
for (int i=0; i<M; ++i)
{
int tmp, target; scanf ("%d%d", &tmp, &target);
int trep=bsearch(target);
switch (tmp)
{
case 0: printf ("%d\n", a[trep]==target ? trep:-1); break;
case 1: printf ("%d\n", trep); break;
case 2: printf ("%d\n", a[trep]>=target ? trep:trep+1); break;
}
}
return 0;
}