Pagini recente » Cod sursa (job #598056) | Cod sursa (job #876193) | Cod sursa (job #1497881) | Cod sursa (job #402884) | Cod sursa (job #223533)
Cod sursa(job #223533)
#include <cstdio>
#define MAX_N 100005
long V[MAX_N];
int N, logN;
void citire()
{
scanf("%d",&N);
for(int i = 0; i < N; ++i)
scanf("%ld",V+i);
for(logN = 1; logN < N; logN <<= 1);
}
int b_search1(int x)
{
int i, lg;
for(lg = logN, i = 0; lg; lg >>= 1)
if(i + lg < N && V[i + lg] <= x)
i += lg;
return i;
}
int b_search2(int x)
{
int i, lg;
for(lg = logN, i = N-1; lg; lg >>= 1)
if(i - lg >= 0 && V[i - lg] >= x)
i -= lg;
return i;
}
void solve()
{
int tip, nr, poz, t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&tip, &nr);
if(tip < 2)
poz = b_search1(nr);
else
poz = b_search2(nr);
if(tip == 0)
if(V[poz] == nr)
printf("%d\n",poz + 1);
else
printf("-1\n");
else
printf("%d\n",poz + 1);
}
}
int main()
{
freopen("cautbin.in","rt",stdin);
freopen("cautbin.out","wt",stdout);
citire();
solve();
}