#include <iostream>
#include<fstream>
using namespace std;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
int binary_s_0(int v[], int left, int right, int el)
{
if(right < left)
return -1;
int mid = left + (right - left) / 2;
if(v[mid] == el && v[mid + 1] > el)
return mid;
else
return binary_s_0(v, mid + 1, right, el);
if(v[mid] < el)
return binary_s_0(v, mid + 1, right, el);
else
return binary_s_0(v, left, mid - 1, el);
}
int binary_s_1(int v[], int left, int right, int el)
{
int mid = left + (right - left) / 2;
if(v[mid] < el && v[mid + 1] > el)
return mid;
//else
//return binary_s_1(v, left, mid, el);
if(v[mid] < el)
return binary_s_1(v, mid + 1, right, el);
else
return binary_s_1(v, left, mid - 1, el);
}
void handle_1_command(int v[], int n, int el)
{
int x = binary_s_0(v, 0, n, el);
if(x != -1)
g<<x + 1<<"\n";
else
g<<binary_s_1(v, 0, n, el) + 1<<"\n";
}
int binary_s_2(int v[], int left, int right, int el)
{
int mid = left + (right - left) / 2;
if(v[mid] > el && v[mid + 1] < el)
return mid;
if(v[mid] < el)
return binary_s_2(v, mid + 1, right, el);
else
return binary_s_2(v, left, mid - 1, el);
}
int binary_s_3(int v[], int left, int right, int el)
{
if(right < left)
return -1;
int mid = left + (right - left) / 2;
if(v[mid] < el && v[mid + 1] == el)
return mid + 1;
else
return binary_s_3(v, left, mid - 1, el);
if(v[mid] < el)
return binary_s_3(v, mid + 1, right, el);
else
return binary_s_3(v, left, mid - 1, el);
}
void handle_2_command(int v[], int n, int el)
{
int x = binary_s_3(v, 0, n, el);
if(x != -1)
g<<x + 1<<"\n";
else
g<<binary_s_2(v, 0, n, el) + 1<<"\n";
}
int main()
{
int N, M, comm, x;
f>>N;
int *v = new int[N];
for(int i = 0; i<N; i++)
{
f>>v[i];
}
f>>M;
for(int i = 0; i<M; i++)
{
f>>comm;
f>>x;
if(comm == 0)
g<<(binary_s_0(v, 0, N - 1, x) + 1)<<"\n";
if(comm == 1)
handle_1_command(v, N - 1, x);
if(comm == 2)
handle_2_command(v, N - 1, x);
}
f.close();
g.close();
return 0;
}