#include<stdio.h>
long x[100002];
long cb1(long st,long dr,long v)
{
long m;
if (st<=dr)
{
m=(st+dr)/2;
if (x[m+1]!=v&&v==x[m])
return m;
else
if (v>=x[m])
return cb1(m+1,dr,v);
else
return cb1(st,m-1,v);
}
return -1;
}
long cb2(long st,long dr,long v,long max,long maxi)
{
long m;
if (st<=dr)
{
m=(st+dr)/2;
if (v>=x[m])
{
if (max<=x[m]) {max=x[m];maxi=m;}
return cb2(m+1,dr,v,max,maxi);
}
else
return cb2(st,m-1,v,max,maxi);
}
return maxi;
}
long cb3(long st,long dr,long v,long max,long maxi)
{
long m;
if (st<=dr)
{
m=(st+dr)/2;
if (x[m]>=v)
{
if (x[m]<=max) {max=x[m];maxi=m;}
return cb3(st,m-1,v,max,maxi);
}
else
return cb3(m+1,dr,v,max,maxi);
}
return maxi;
}
int main()
{
long n,m,i,t,k,l;
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%ld",&n);
for (i=1;i<=n;i++)
scanf("%ld",&x[i]);
scanf("%ld",&m);
for (i=1;i<=m;i++)
{
scanf("%ld%ld",&t,&k);
if (t==0)
l=cb1(1,n,k);
else
if (t==1)
l=cb2(1,n,k,0,0);
else
if (t==2)
l=cb3(1,n,k,100002,0);
printf("%ld\n",l);
}
return 0;
}