#include <stdio.h>
int binSearch0(int a[], int n, int x){
int lt = 0, rt = n - 1, poz = -2;
while(lt <= rt){
int mid = lt + (rt - lt) / 2;
if(a[mid] > x) rt = mid - 1;
if(a[mid] < x) lt = mid + 1;
if(a[mid] == x){
poz = mid;
lt = mid + 1;
}
}
return poz;
}
int binSearch1(int a[], int n, int x){
int lt = 0, rt = n - 1, poz = -1;
while(lt <= rt){
int mid = lt + (rt - lt) / 2;
if(a[mid] > x) rt = mid - 1;
if(a[mid] <= x){
poz = mid;
lt = mid + 1;
}
}
return poz;
}
int binSearch2(int a[], int n, int x){
int lt = 0, rt = n - 1, poz = -1;
while(lt <= rt){
int mid = lt + (rt - lt) / 2;
if(a[mid] >= x) {
rt = mid - 1;
poz = mid;
}
if(a[mid] < x) lt = mid + 1;
}
return poz;
}
int main(){
FILE *fin = fopen("cautbin.in", "r");
FILE *fout = fopen("cautbin.out", "w");
int N, M, a[100000], operation, x;
fscanf(fin, "%d", &N);
for(int i = 0; i < N; i++)
fscanf(fin, "%d", &a[i]);
fscanf(fin, "%d", &M);
for(int i = 1; i <=M; i++){
fscanf(fin, "%d%d", &operation, &x);
if(operation == 0) fprintf(fout, "%d\n", binSearch0(a, N, x) + 1);
if(operation == 1) fprintf(fout, "%d\n", binSearch1(a, N, x) + 1);
if(operation == 2) fprintf(fout, "%d\n", binSearch2(a, N, x) + 1);
// switch(operation){
// case 0:
// fprintf(fout, "%d\n", binSearch0(a, N, x));
// case 1:
// fprintf(fout, "%d\n", binSearch1(a, N, x));
// case 2:
// fprintf(fout, "%d\n", binSearch2(a, N, x));
// default:
// break;
// }
}
// printf("%d\n", binSearch2(a, N, 3));
fclose(fin);
fclose(fout);
}