Pagini recente » Cod sursa (job #3266951) | Cod sursa (job #2393677) | Cod sursa (job #2485641) | Cod sursa (job #604555) | Cod sursa (job #1180304)
Program binary;
var n,i,r,b,t,j,x,poz,min,max : longint;
a : array [1..100000] of longint;
procedure swap(var x,y : longint);
var aux : longint;
begin
aux:=x;
x:=y;
y:=aux;
end;
procedure qsort(left, right : longint);
var i,j, pivot : longint;
begin
i:=left; j:=right; pivot:=A[(left+right)div 2];
repeat
while A[i]<pivot do i:=i+1;
while A[j]>pivot do j:=j-1;
if i<=j then begin
swap(A[i],A[j]);
i:=i+1;
j:=j-1;
end;
until i>j;
if i<right then qsort(i,right);
if j>left then qsort(left,j);
end;
procedure cauta_min(nr: longint);
var pivot,left,right : longint;
begin
right:=n; left:=1;
repeat
pivot:=left+(right-left) 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;
repeat
pivot:=left+(right-left) 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-left) 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]);
qsort(1,n);
readln(t);
for j:=1 to t do begin
readln(r,b) ;
case r of
0 : begin
cauta(b);
writeln(poz);
end;
1 : begin
cauta_min(b);
writeln(min);
end;
2 : begin
cauta_max(b);
writeln(max);
end;
end;
end;
close(input);
close(output);
end.