#include <cstdio>
#define filein "cautbin.in"
#define fileout "cautbin.out"
using namespace std;
int v[100003];
int n,m;
int BIN_SEARCH0(int start,int finish,int key);
int BIN_SEARCH1(int start,int finish,int key);
int BIN_SEARCH2(int start,int finish,int key);
int main()
{
FILE *in,*out;
in=fopen(filein,"r");
out=fopen(fileout,"w");
fscanf(in,"%d",&n);
int i;
for (i=1; i<=n; i++)
fscanf(in,"%d",v+i);
fscanf(in,"%d",&m);
int type,x;
for (i=1; i<=m; i++)
{
fscanf(in,"%d%d",&type,&x);
if (type==0) fprintf(out,"%d\n",BIN_SEARCH0(1,n,x));
if (type==1) fprintf(out,"%d\n",BIN_SEARCH1(1,n,x));
if (type==2) fprintf(out,"%d\n",BIN_SEARCH2(1,n,x));
}
fclose(in);
fclose(out);
return 0;
}
int BIN_SEARCH0(int start,int finish,int key)
{
int mij=(start+finish)/2;
if (v[mij]<key) return BIN_SEARCH0(mij+1,finish,key);
if (v[mij]>key) return BIN_SEARCH0(start,mij-1,key);
if (v[mij]==key)
{
if (v[mij+1]==key) return BIN_SEARCH0(start+1,finish,key);
return mij;
}
}
int BIN_SEARCH1(int start,int finish,int key)
{
int mij=(start+finish)/2;
if (v[mij]<=key && v[mij+1]>key) return mij;
if (v[mij]<=key) return BIN_SEARCH1(mij+1,finish,key);
else return BIN_SEARCH1(start,mij-1, key);
}
int BIN_SEARCH2(int start,int finish,int key)
{
int mij=(start+finish)/2;
if (v[mij]>=key && v[mij-1]<key) return mij;
if (v[mij]>=key) return BIN_SEARCH2(start,mij-1,key);
else return BIN_SEARCH2(mij+1,finish,key);
}