Pagini recente » Cod sursa (job #30546) | Cod sursa (job #2877019) | Cod sursa (job #1592280) | Cod sursa (job #1644722) | Cod sursa (job #1180309)
Program binary;
var n,i,r,b,t,j,x,poz,min,max : longint;
a : array [1..100000] of longint;
b1,b2 :array [0..1 shl 17] of char;
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'); settextbuf(input,b1); reset(input);
assign(output,'cautbin.out'); settextbuf(output,b2); 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.