Pagini recente » Cod sursa (job #643468) | Cod sursa (job #619770) | Cod sursa (job #383412) | Cod sursa (job #1680699) | Cod sursa (job #295166)
Cod sursa(job #295166)
var f,g:Text;
j,p,n,c,x,m,i,k:longint;
a:array[0..100001]of longint;
function caut_bin0(x:longint):longint;
var s,d,mij:longint;
begin
s:=1;d:=n;
caut_bin0:=-1;
while (s<=d) do
begin
mij:=s+(d-s) div 2;
if a[mij]=x then
if (a[mij+1]>x) then begin caut_bin0:=mij; break end
else s:=mij+1
else if a[mij]>x then d:=mij-1
else s:=mij+1;
end;
end;
function caut_bin1(x:longint):longint;
var s,d,mij:longint;
begin
s:=1;d:=n;
while (s<=d) do
begin
mij:=s+(d-s) div 2;
if a[mij]=x then
if a[mij-1]<x then begin d:=mij;break end
else d:=mij-1
else if a[mij]>x then d:=mij-1
else s:=mij+1;
end;
caut_bin1:=d
end;
function caut_bin2(x:longint):longint;
var s,d,mij:longint;
begin
s:=1;d:=n;
while (s<=d) do
begin
mij:=s+(d-s) div 2;
if a[mij]=x then
if a[mij+1]>x then begin s:=mij;break end
else s:=mij+1
else if a[mij]>x then d:=mij-1
else s:=mij+1;
end;
caut_bin2:=s
end;
begin
assign(f,'cautbin.in');reset(f);
assign(g,'cautbin.out');rewrite(g);
readln(f,n);
a[0]:=100001; a[n+1]:=0;
for i:=1 to n do
begin
read(f,a[i]);
end;
readln(f,m);
for i:=1 to m do
begin
read(f,c,x);
case c of
0: if a[n]=x then writeln(g,n) else writeln(g,caut_bin0(x));
{if a[p]=x then
begin
j:=p;
while (j+1<=n) and (a[j+1]=x) do inc(j);
writeln(g,j);
end
else writeln(g,-1);}
1: if a[1]=x then writeln(g,1)
else
begin p:=caut_bin1(x);
j:=p;while (j-1>=1) and (a[j-1]=a[p]) do j:=j-1;
writeln(g,j)
end;
{ begin
j:=p;
while (j-1>=1) and (a[j-1]=x) do dec(j);
if (a[p]=x) then writeln(g,j)
else if j>1 then writeln(g,j-1)
else writeln(g,j)
end;}
2: if a[n]=x then writeln(g,n)
else
begin p:=caut_bin2(x);
j:=p;while (j+1<=n) and (a[j+1]=a[p]) do j:=j+1;
writeln(g,j)
end;
{ begin
j:=p;
while (j+1>=1) and (a[j+1]=x) do inc(j);
if (a[p]=x) then writeln(g,j)
else if j<n then writeln(g,j+1)
else writeln(g,j+1)
end }
end;
end;
close(g);
end.