Pagini recente » Cod sursa (job #2716457) | Cod sursa (job #223967) | Cod sursa (job #1605125) | Cod sursa (job #1482125) | Cod sursa (job #827522)
Cod sursa(job #827522)
#include <cstdio>
using namespace std;
int v[100005];
int n;
static int logN;
int asc(int x)
{
int step=logN,ref;
for(ref=0;step;step>>=1)
if((ref|step) <= n && v[ref|step] <= x)
ref|=step;
return ref;
}
int desc(int x)
{
int step=logN,ref;
for(ref=n;step;step>>=1)
if(ref-step > 0 && v[ref-step] >= x)
ref-=step;
return ref;
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
int m,i;
int tip,a;
scanf("%d",&n);
for(logN=1;logN<=n;logN<<=1);
for(i=1;i<=n;++i)
scanf("%d",v+i);
scanf("%d",&m);
int x;
while(m--)
{
scanf("%d %d",&tip,&a);
if(tip == 0)
{
x = asc(a);
if(v[x] != a)
printf("-1\n");
else
printf("%d\n",x);
}
else if(tip == 1)
printf("%d\n",asc(a));
else
printf("%d\n",desc(a));
}
return 0;
}