Cod sursa(job #602937)
Utilizator | Data | 13 iulie 2011 19:13:58 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva educationala | Marime | 1.6 kb |
var i,m,n,o,x,mij,st,dr,rez:integer;
a:array[0..100000] of integer;
f,g:text;
ok:boolean;
begin
assign(f,'cautbin.in');
reset(f);
assign(g,'cautbin.out');
rewrite(g);
read(f,n);
for i:=1 to n do read(f,a[i]);
read(f,m);
for i:=1 to m do
begin
read(f,o,x);
ok:=false;
st:=1;
dr:=n;
if (o=0) then
begin
while (st<=dr) do
begin
mij:=(st+dr) div 2;
if a[mij]<=x then st:=mij+1
else
dr:=mij-1;
end;
if a[mij]>x then mij:=mij-1;
if a[mij]=x then writeln(g,mij) else
writeln(g,-1)
end;
if o=1 then
begin
while (st<dr) do
begin
mij:=(st+dr) div 2;
if a[mij]<=x then st:=mij+1
else
dr:=mij;
end;
mij:=(st+dr) div 2;
if a[mij]>x then mij:=mij-1;
writeln(g,mij)
end;
if o=2 then
begin
while (st<=dr) do
begin
mij:=(st+dr) div 2;
if a[mij]<x then st:=mij+1
else dr:=mij;
end;
if a[mij]<x then mij:=mij+1;
writeln(g,mij);
end;
end;
close(f);
close(g);
end.