#include <iostream>
#include <fstream>
#include <stdlib.h>
using namespace std;
int resAux(int low, int high, int v[], int el) {
int mid = low + (high - low) / 2;
while(low <= high) {
if(v[mid] < el)
low = mid + 1;
if(v[mid] > el)
high = mid - 1;
if(v[mid] == el && v[mid - 1] != el)
return mid;
if(v[mid] == el && v[mid -1] == el)
high = mid - 1;
mid = low + (high - low) / 2;
}
return -1;
}
int res0(int low, int high, int v[], int el) {
int mid = low + (high - low) / 2;
while(low <= high) {
if(v[mid] < el)
low = mid + 1;
if(v[mid] > el)
high = mid - 1;
if(v[mid] == el && v[mid + 1] != el)
return mid;
if(v[mid] == el && v[mid + 1] == el)
low = mid + 1;
mid = low + (high - low) / 2;
}
return -1;
}
int res1(int low, int high, int v[], int el) {
if(res0(low, high, v, el) != -1)
return res0(low, high, v, el);
int ch = high;
int mid = low + (high - low) / 2;
while(low <= high) {
if(v[mid] < el)
low = mid + 1;
if(v[mid] > el)
high = mid - 1;
mid = low + (high - low) / 2;
}
if(v[mid] > el)
mid --;
return res0(0, ch, v, v[mid]);
}
int res2(int low, int high, int v[], int el) {
if(resAux(low, high, v, el) != -1)
return resAux(low, high, v, el);
int ch = high;
int mid = low + (high - low) / 2;
while(low <= high) {
if(v[mid] < el)
low = mid + 1;
if(v[mid] > el)
high = mid - 1;
mid = low + (high - low) / 2;
}
if(v[mid] < el)
mid ++;
return resAux(0, ch, v, v[mid]);
}
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int n, m, intr, el;
int main()
{
f >> n;
int v[100000];
for(int i = 0; i < n; i ++) {
f >> v[i];
}
f >> m;
for(int i = 0; i < m; i ++) {
f >> intr >> el;
if(intr == 0) {
g << res0(0, n, v, el) + 1 << "\n";
}
if(intr == 1) {
g << res1(0, n, v, el) + 1 << "\n";
}
if(intr == 2) {
g << res2(0, n, v, el) + 1 << "\n";
}
}
f.close();
g.close();
return 0;
}