{
Se da un sir de numere ordonat crescator cu N elemente, si se cere sa se raspunda la M intrebari de tipul:
0 x - cea mai mare pozitie pe care se afla un element cu valoarea x sau -1 daca aceasta valoare nu se gaseste in sir
1 x - cea mai mare pozitie pe care se afla un element cu valoarea mai mica sau egala cu x in sir. Se garanteaza ca cel mai mic
numar al sirului este mai mic sau egal decat x
2 x - cea mai mica pozitie pe care se afla un element cu valoarea mai mare sau egala cu x in sir. Se garanteaza ca cel mai mare
numar din sir este mai mare sau egal decat x
}
var a:array[1..100{003}]of longint;
n,m,i,x,rez:longint;
tip:byte;
f,fo:text;
procedure cbin(tip:byte;st,dr,x:longint;var r:longint);
var m:longint;
begin
if st<dr then
begin
m:=st+(dr-st)div 2;
case tip of
0:begin
if a[m]<x then
cbin(tip,st,m,x,r)
else
begin
if a[m]=x then r:=m;
cbin(tip,m+1,dr,x,r);
end;
end;
1:begin
if a[m]<=x then
begin
r:=m;
cbin(tip,m+1,dr,x,r)
end
else
begin
cbin(tip,st,m,x,r);
end;
end;
2:begin
if a[m]>=x then
begin
r:=m;
cbin(tip,st,m,x,r);
end
else
begin
cbin(tip,m+1,dr,x,r);
end;
end;
end;
end
else
begin
case tip of
0:if a[dr]=x then r:=dr;
1:if a[dr]<x then r:=dr;
2:if a[dr]>x then r:=dr;
end;
end;
end;
begin
assign(f,'cautbin.in');
assign(fo,'cautbin.out');
reset(f);
readln(f,n);
for i:=1 to n do
read(f,a[i]);
readln(f);
readln(f,m);
rewrite(fo);
for i:=1 to m do
begin
readln(f,tip,x);rez:=-1;
cbin(tip,1,n,x,rez);
writeln(fo,rez);
end;
close(fo);
close(f);
end.