Cod sursa(job #1180308)
Utilizator | Data | 30 aprilie 2014 14:54:55 | |
---|---|---|---|
Problema | Cautare binara | Scor | 60 |
Compilator | fpc | Status | done |
Runda | Arhiva educationala | Marime | 2.56 kb |
Program binary;
var n,i,r,b,t,j,x,poz,min,max : longint;
a : array [1..100000] of longint;
procedure cauta_min(nr: longint);
var pivot,left,right : longint;
begin
right:=n; left:=1;
repeat
pivot:=(left+right) div 2;
if nr>=A[pivot] then begin
min:=pivot;
left:=pivot+1;
end
else
if nr<A[pivot] then right:=pivot-1
until left>right;
end;
procedure cauta(nr: longint);
var pivot,left,right : longint;
begin
right:=n; left:=1;
poz:=0;
repeat
pivot:=(left+right)div 2;
if nr=A[pivot] then begin
poz:=pivot;
left:=pivot+1;
end
else
if nr<A[pivot] then right:=pivot-1
else left:=pivot+1;
until left>right;
end;
procedure cauta_max(nr: longint);
var pivot,left,right : longint;
begin
right:=n; left:=1;
repeat
pivot:=(left+right) div 2;
if nr<=A[pivot] then begin
max:=pivot;
right:=pivot-1;
end
else
if nr>A[pivot] then left:=pivot+1;
until left>right;
end;
begin
assign(input,'cautbin.in'); reset(input);
assign(output,'cautbin.out'); rewrite(output);
readln(n);
for i:=1 to n do read(A[i]);
readln(t);
for j:=1 to t do begin
readln(r,b) ;
case r of
0 : begin
cauta(b);
if poz<>0 then writeln(poz)
else writeln(-1);
end;
1 : begin
cauta_min(b);
writeln(min);
end;
2 : begin
cauta_max(b);
writeln(max);
end;
end;
end;
close(input);
close(output);
end.