#include <fstream>
using namespace std;
int a[100001];
ifstream fin("cautbin.in");
ofstream fout("cautbin.out");
int egalx(int k, int n)
{
int lo = 1;
int hi = n;
int max = -1;
while (hi - lo >= 1)
{
int m = lo + (hi - lo) / 2;
if (a[m] > k)
{
hi = m - 1;
}
else
{
if (a[m] == k)
{
max = m;
}
lo = m+1;
}
}
if (a[lo] == k)
return lo;
return max;
}
int mmicx(int k, int n)
{
if (a[1]>k) return -1;
int lo = 1;
int hi = n;
int max = -1;
while (hi - lo >= 1)
{
int m = lo + (hi - lo) / 2;
if (a[m] > k)
{
hi = m - 1;
}
else
{
max = m;
lo = m + 1;
}
}
if (a[lo] <= k)
return lo;
return max;
}
int mmarex(int k, int n)
{
int lo = 1;
int hi = n;
int max = -1;
while (hi - lo >= 1)
{
int m = lo + (hi - lo) / 2;
if (a[m] >= k)
{
max = m;
hi = m - 1;
}
else
{
lo = m + 1;
}
}
if (a[lo] >= k)
return lo;
return max;
}
int main()
{
int n;
fin >> n;
for (int i = 1; i <= n; i++)
{
fin >> a[i];
}
int m;
fin >> m;
for (int i = 1; i <= m; i++)
{
int aux;
fin >> aux;
if (aux == 0)
{
int x;
fin >> x;
fout << egalx(x, n) << '\n';
}
if (aux == 1)
{
int x;
fin >> x;
fout << mmicx(x, n) << '\n';
}
if (aux == 2)
{
int x;
fin >> x;
fout << mmarex(x, n) << '\n';
}
}
}