Cod sursa(job #1120055)
Utilizator | Data | 24 februarie 2014 21:21:12 | |
---|---|---|---|
Problema | Cautare binara | Scor | 50 |
Compilator | fpc | Status | done |
Runda | Arhiva educationala | Marime | 1.82 kb |
program binar;
type
vector=array[1..100001] of longint;
var
n,m,i,j,k,li,ls,x:longint;
a:vector;
f,g:text;
b:0..2;
begin
assign(f,'cautbin.in');
reset(f);
readln(f,n);
for i:=1 to n do read(f,a[i]);
readln(f,m);
assign(g,'cautbin.out');
rewrite(g);
for j:=1 to m do
begin
readln(f,b,x);
li:=1;
ls:=n;
case b of
0:begin
while (li<=ls) do
begin
k:=(ls+li) div 2;
if (a[k]<=x) then li:=k+1
else ls:=k-1;
end;
k:=(ls+li) div 2;
if a[k]>x then k:=k-1;
if a[k]=x then writeln(g,k)
else writeln(g,-1);
end;
1:begin
while (li<ls) do
begin
k:=(ls+li) div 2;
if a[k]<=x then li:=k+1
else ls:=k;
end;
k:=(ls+li) div 2;
if a[k]>x then k:=k-1;
writeln(g,k);
end;
2:begin
while (li<ls) do
begin
k:=(ls+li) div 2;
if a[k]<x then li:=k+1
else ls:=k;
end;
k:=(ls+li) div 2;
if a[k]<x then k:=k+1;
writeln(g,k);
end;
end;
end;
close(f);
close(g);
end.