#include <fstream>
#include <iostream>
using namespace std;
int equal(int v[100000], int st, int dr, int x) {
int mij = st + (dr - st) / 2;
if(st > dr) {
return -1;
}
if(v[mij] == x && v[mij+1] != x)
return mij;
else
if(v[mij] == x || v[mij] < x) {
return equal(v, mij + 1, dr, x);
}
else
return equal(v, st, mij - 1, x);
}
int lower(int v[100000], int st, int dr, int x) {
int mij = st + (dr - st) / 2;
if(st > dr)
return dr;
if(v[mij] <= x && v[mij+1] > x)
return mij;
else
if(v[mij] <= x) {
return lower(v, mij + 1, dr, x);
}
else
return lower(v, st, mij - 1, x);
}
int great(int v[100000], int st, int dr, int x) {
int mij = st + (dr - st) / 2;
if(st > dr)
return dr;
if(v[mij] >= x && v[mij-1] < x) {
return mij;
}
else
if(v[mij] < x) {
return great(v, mij + 1, dr, x);
}
else {
return great(v, st, mij - 1, x);
}
}
int main() {
int n, v[100000], m, operatie, numar;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f >> n;
for(int i = 0; i < n; i++) {
f >> v[i];
}
f >> m;
for(int i = 0; i < m; i++) {
f >> operatie >> numar;
if(operatie == 0) {
if(equal(v, 0, n - 1, numar) != -1)
g << equal(v, 0, n - 1, numar) + 1 << endl;
else
g<< "-1" << endl;
continue;
}
if(operatie == 1) {
g << lower(v, 0, n - 1, numar) + 1 << endl;
}
if(operatie == 2) {
g << great(v, 0, n - 1, numar) + 1 << endl;
}
}
return 0;
}