#include <fstream>
using namespace std;
int N, M;
int V[100002];
ifstream in("cautbin.in");
ofstream out("cautbin.out");
int query1(int x) {
int st = 1, dr = N;
while (st < dr - 1) {
int mid = st + (dr - st) / 2;
if (V[mid] <= x) {
st = mid;
} else if (V[mid] > x) {
dr = mid;
}
}
if (V[dr] == x) {
return dr;
} else if (V[st] == x) {
return st;
} else {
return -1;
}
}
int query2(int x) {
int st = 1, dr = N;
while (st < dr - 1) {
int mid = st + (dr - st) / 2;
if (V[mid] <= x) {
st = mid;
} else if (V[mid] > x) {
dr = mid;
}
}
if (V[dr] <= x) {
return dr;
} else {
return st;
}
}
int query3(int x) {
int st = 1, dr = N;
while (st < dr - 1) {
int mid = st + (dr - st) / 2;
if (V[mid] < x) {
st = mid;
} else {
dr = mid;
}
}
if (V[st] >= x) {
return st;
} else {
return dr;
}
}
int main() {
in >> N;
for (int i = 1; i <= N; i++) {
in >> V[i];
}
in >> M;
for (int i = 1; i <= M; i++) {
int cod, x;
in >> cod >> x;
if (cod == 0) {
out << query1(x) << "\n";
} else if (cod == 1) {
out << query2(x) << "\n";
} else {
out << query3(x) << "\n";
}
}
}