#include<cstdio>
#define NMAX 100002
#define INF 1<<20
int n,m,a[NMAX],tip,val,rez,rez1;
inline int max (int a ,int b)
{
return a > b ? a : b ;
}
inline int min (int a ,int b)
{
return a < b ? a : b ;
}
int cautbin(int x,int left,int right)
{
if( left > right ) return -1;
int mid=left+(right-left)/2;
if ( a [ mid ] == x )
{
while ( a [ mid ] == x ) ++mid;
return --mid;
}
if( a [ mid ] > x )
cautbin(x,left,mid-1);
else
cautbin(x,mid+1,right);
}
int cautbin2(int x,int left,int right)
{
if( left > right ) return -1;
int mid=left+(right-left)/2;
if( a [ mid ] > x )
cautbin2(x,left,mid-1);
else
{
rez=mid;
cautbin2(x,mid+1,right);
}
}
int cautbin3(int x,int left,int right)
{
if( left > right ) return -1;
int mid=left+(right-left)/2;
if( a [ mid ] >= x )
{
rez1=mid;
cautbin3(x,left,mid-1);
}
else
cautbin3(x,mid+1,right);
}
int main()
{
freopen("cautbin.in","r",stdin);
freopen("cautbin.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<=n;++i)scanf("%d",&a[i]);
scanf("%d",&m);
for (int i=1;i<=m;++i)
{
scanf("%d",&tip);
switch ( tip )
{
case 0:
scanf( "%d" , &val );
printf( "%d\n" , cautbin ( val, 1,n ) );
break;
case 1:
scanf( "%d" , &val );
rez=INF;
cautbin2(val,1,n);
printf( "%d\n" , rez );
break;
case 2:
scanf( "%d" , &val );
rez1=-1;
cautbin3(val,1,n);
printf( "%d\n" , rez1 );
}
}
}