#include <fstream>
#include <iostream>
using namespace std;
int n, a[100003], m;
int caut0(int a[], int n, int x)
{
int s = 0, d = n-1, mij,poz;
poz = -2;
while(s<=d)
{
mij = s + (d-s)/2;
if(x == a[mij])
{
poz = mij;
s = mij+1;
}
else
if(x < a[mij])
d = mij - 1;
else
s = mij + 1;
}
return poz;
}
///cea mai mare poz pe care se afla o val mai mica sau egala cu x
///a = (1, 2, 2, 3, 4, 4, 4) x = 4, poz = 7
///a = (1, 1, 1, 3, 3, 5, 7, 8, 9) x = 4, poz = 5
int caut1(int a[], int n, int x)
{
int s = 0, d = n-1, mijl, poz;
while(s<=d)
{
mijl = s + (d-s)/2;
if(x >= a[mijl])
{
poz = mijl;
s = mijl+1;
}
else
d = mijl - 1;
}
return poz;
}
/// cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir
///a = (1. 2, 3, 3, 3,7, 7, 7) x = 4, poz = 6
///a = (1, 2, 2, 2, 3, 4, 5, 6, 7, 8) x = 2, poz = 2
int caut2(int a[], int n, int x)
{
int s = 0, d = n-1, mijl, poz;
while(s<=d)
{
mijl = s + (d-s)/2;
if(a[mijl] < x)
s = mijl + 1;
else
{
poz = mijl;
d = mijl - 1;
}
}
return poz;
}
void citire(int a[], int &n)
{
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int x, op;
f>>n;
for(int i=0;i<n;i++)
f>>a[i];
f>>m;
for(int i=0;i<m;++i)
{
f>>op>>x;
if(op == 0)
g<<caut0(a, n, x) + 1<<"\n";
if(op == 1)
g<<caut1(a, n, x) + 1<<"\n";
if(op == 2)
g<<caut2(a, n, x) + 1<<"\n";
}
}
///cea mai mica poz pe care se afla un elem mai mic sau egal cu x
///2 3 3 3 5 8
///x=4 --> poz=1. mereu este 1
int main()
{
citire(a,n);
/*int nr=1;
ETICHETA1:
nr++;
if(nr<=10)
goto ETICHETA1;
cout<<nr<<"\n";*/
///asa functyioneaza goto
return 0;
}