Cod sursa(job #1071626)
Utilizator | Data | 3 ianuarie 2014 11:29:18 | |
---|---|---|---|
Problema | Cautare binara | Scor | 0 |
Compilator | fpc | Status | done |
Runda | Arhiva educationala | Marime | 2.38 kb |
var n,i,j,m,temp,nr,poz,left,right:longint;
a:array[1..100001] of longint;
begin
assign(input,'cautbin.in');
assign(output,'cautbin.out');
reset(input);
rewrite(output);
readln(n);
for i:=1 to n do
read(a[i]);
readln(m);
for i:=1 to m do
begin
left:=1; right:=n; poz:=(left+right) div 2;
read(temp); readln(nr);
if temp=0 then begin
while (a[poz]<>nr) and (left<right) do
begin
if a[poz]>nr then right:=poz
else if a[poz]<nr then left:=poz;
poz:=(left+right) div 2;
end;
if a[poz]=nr then begin
for j:=poz to n do
begin
if a[j]=nr then poz:=j
else break;
end;
writeln(poz);
end
else writeln('-1');
end;
if temp=1 then begin
while (a[poz]>nr) and (left<right) do
begin
right:=poz;
poz:=(left+right) div 2;
end;
for j:=poz to n do
begin
if a[j]<=nr then poz:=j
else break;
end;
writeln(poz);
end;
if temp=2 then begin
while (a[poz]<nr) and (left<right) do
begin
left:=poz;
poz:=(left+right) div 2;
end;
for j:=poz downto 1 do
begin
if a[j]>=nr then poz:=j
else break;
end;
writeln(poz);
end;
end;
close(input);
close(output);
{Si totusi este trist in lume.}
end.