#include <stdio.h>
FILE *in, *out;
void init()
{
in = fopen("cautbin.in","r");
out = fopen("cautbin.out","w");
}
long int cautBin0(long int *vec, long int len, long int x)
{
long int mid, st, dr;
st = 1;
dr = len;
while (st <= dr)
{
mid = (st + dr) / 2;
if(vec[mid] <= x)
st = mid + 1;
else
dr = mid - 1;
}
mid = (st + dr) / 2;
if(vec[mid] > x) mid--;
if(vec[mid] == x) return mid;
return -1;
}
long int cautBin1(long int *vec, long int len, long int x)
{
long int mid, st, dr;
st = 1;
dr = len;
while (st < dr)
{
mid = (st + dr) / 2;
if(vec[mid] <= x)
st = mid + 1;
else
dr = mid;
}
mid = (st + dr) / 2;
if(vec[mid] > x) mid--;
return mid;
}
long int cautBin2(long int *vec, long int len, long int x)
{
long int mid, st, dr;
st = 1;
dr = len;
while (st < dr)
{
mid = (st + dr) / 2;
if(vec[mid] < x)
st = mid + 1;
else
dr = mid;
}
mid = (st + dr) / 2;
if(vec[mid] > x) mid++;
return mid;
}
int main()
{
init();
long int vec[100001],i,n,m,x,tmp;
fscanf(in,"%lu",&n);
for(i = 1;i <= n;i++)
fscanf(in,"%lu",&vec[i]);
fscanf(in,"%lu",&m);
for(i = 0; i < m;i++)
{
fscanf(in,"%lu",&tmp);
switch(tmp)
{
case 0:
fscanf(in,"%lu",&x);
fprintf(out,"%lu\n",cautBin0(vec,n,x));
break;
case 1:
fscanf(in,"%lu",&x);
fprintf(out,"%lu\n",cautBin1(vec,n,x));
break;
case 2:
fscanf(in,"%lu",&x);
fprintf(out,"%lu\n",cautBin2(vec,n,x));
break;
default : fprintf(out,"-1\n");
}
}
return 0;
}