#include <fstream>
using namespace std;
int answerQ0(int *vect, int low, int high, int val);
int answerQ1(int *vect, int low, int high, int val);
int answerQ2(int *vect, int low, int high, int val);
int main(void)
{
int n, m, i, qType, qVal;
int *vect;
ifstream f("cautbin.in");
ofstream g("cautbin.out");
f >> n;
vect = new int[n];
for (i=0;i<n;i++)
{
f >> vect[i];
}
f >> m;
for (i=0;i<m;i++)
{
f >> qType;
f >> qVal;
switch(qType)
{
case 0:
g << answerQ0(vect,0,n-1,qVal)+1 << endl;
break;
case 1:
g << answerQ1(vect,0,n-1,qVal)+1 << endl;
break;
case 2:
g << answerQ2(vect,0,n-1,qVal)+1 << endl;
break;
}
}
f.close();
g.close();
delete[] vect;
return 0;
}
int answerQ0(int *vect, int low, int high, int val)
{
if (low > high) return -2;
if (low == high)
{
if (vect[low-1] == val)
return low-1;
else return -2;
}
int mid = low + (high-low)/2;
if (vect[mid] <= val)
{
return answerQ0(vect,mid+1,high,val);
}
else
{
return answerQ0(vect,low,mid-1, val);
}
}
int answerQ1(int *vect, int low, int high, int val)
{
if (low == high)
{
if (vect[low-1] == val)
{
return low-1;
}
return low;
}
int mid = low + (high-low)/2;
if (vect[mid] > val)
{
return answerQ1(vect, low, mid-1,val);
}
else
{
return answerQ1(vect,mid+1,high,val);
}
}
int answerQ2(int *vect, int low, int high, int val)
{
if (low == high)
{
if (vect[low+1] == val)
{
return low+1;
}
return low;
}
int mid = low + (high-low)/2;
if (vect[mid] >= val)
{
return answerQ1(vect, low, mid-1,val);
}
else
{
return answerQ1(vect,mid+1,high,val);
}
}