#include <stdio.h>
#include <stdlib.h>
int max_pos(int *a, int index1, int index2, int value)
{
if (index1 == index2)
{
if (a[index1] == value)
return index1;
return -1;
}
int middle = index1 + (index2 - index1)/2;
int p = max_pos(a, middle + 1, index2, value);
if (p == -1)
p = max_pos(a, index1, middle, value);
return p;
}
int max_min_pos(int *a, int index1, int index2, int value)
{
if (index1 == index2)
{
if (a[index1] <= value)
return index1;
return -1;
}
int middle = index1 + (index2 - index1)/2;
int p = max_min_pos(a, middle + 1, index2, value);
if (p == -1)
p = max_min_pos(a, index1, middle, value);
return p;
}
int min_max_pos(int *a, int index1, int index2, int value)
{
if (index1 == index2)
{
if (a[index1] >= value)
return index1;
return -1;
}
int middle = index1 + (index2 - index1)/2;
int p = min_max_pos(a, index1, middle, value);
if (p == -1)
p = min_max_pos(a, middle + 1, index2, value);
return p;
}
int main()
{
int *a = NULL;
int n = -1, m = -1, i, code, x, result;
freopen("cautbin.in", "r", stdin);
freopen("cautbin.out", "w", stdout);
scanf("%d", &n);
a = (int*)calloc(n, sizeof(int));
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
scanf("%d", &m);
for (i = 0; i < m; i++)
{
scanf("%d %d", &code, &x);
switch (code)
{
case 0:
result = max_pos(a, 0, n - 1 , x);
if (result != -1)
result++;
printf("%d\n", result);
break;
case 1:
result = max_min_pos(a, 0, n - 1, x);
if (result != -1)
result++;
printf("%d\n", result);
break;
case 2:
result = min_max_pos(a, 0, n - 1, x);
if (result != -1)
result++;
printf("%d\n", result);
break;
default:
break;
}
}
free(a);
return 0;
}