#include <fstream>
#include <iostream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
const int NMax = 100005;
int n, m, a[NMax];
void Exist(int s, int d, int x)
{
if(s <= d)
{
bool sw = 0;
int m = (s+d)/2;
if((a[m] == x && a[m+1] != x && m+1 <= n) || (a[m] == x && m+1 > n))
{
g<<m<<'\n';
sw = 1;
}
if(sw == 0)
{
if(a[m] < x) Exist(s,m-1,x);
else Exist(m,d,x);
}
}
}
void Small(int s, int d, int x)
{
if(s <= d)
{
bool sw = 0;
int m = (s+d)/2;
if((a[m] <= x && a[m+1] > x && m+1 <= n) || (a[m] <= x && m+1 > n))
{
g<<m<<'\n';
sw = 1;
}
if(sw == 0)
{
if(a[m] < x)Small(s,m-1,x);
else Small(m,d,x);
}
}
}
void Big(int s, int d, int x)
{
if(s <= d)
{
bool sw = 0;
int m = (s+d)/2;
if((a[m] >= x && a[m-1] < x && m-1 >= 1) || (a[m] >= x && m-1 < 1 ))
{
g<<m<<'\n';
sw = 1;
}
if(sw == 0)
{
if(a[m] <= x) Big(s,m,x);
else Big(m+1,d,x);
}
}
}
void Solve()
{
int job, x;
while(m--)
{
f>>job>>x;
if(job == 0) Exist(1,n,x);
if(job == 1) Small(1,n,x);
if(job == 2) Big(1,n,x);
}
}
void Read()
{
f>>n;
for(int i = 1; i <= n; i++) f>>a[i];
f>>m;
}
int main()
{
Read();
Solve();
return 0;
}