Pagini recente » Cod sursa (job #2277280) | Cod sursa (job #836400) | Cod sursa (job #952974) | Cod sursa (job #2316159) | Cod sursa (job #180480)
Cod sursa(job #180480)
program RMQ;
var A : array [1..100000,0..17] of longint;
p : array [0..17] of longint;
lg : array [1..100000] of byte;
i,j,n,m,x,y,put,k : longint;
f,g : text;
begin
assign(f,'rmq.in');
reset(f);
assign(g,'rmq.out');
rewrite(g);
readln(f,n,m);
for i := 1 to n do
readln(f,A[i,0]);
put := 0;
lg[1] := 0;
p[0] := 1;
x := 1;
for i := 1 to 100000 do begin
if 2*x<=i then begin
x := 2*x;
inc(put);
p[put] := x;
end;
lg[i] := put;
end;
p[put+1] := 2*x;
for i := n downto 1 do begin
j := 1;
while i+p[j]<=n+1 do begin
if A[i,j-1]<A[i+p[j-1],j-1] then A[i,j] := A[i,j-1]
else A[i,j] := A[i+p[j-1],j-1];
j := j+1;
end;
end;
for i := 1 to m do begin
readln(f,x,y);
k := lg[y-x+1];
if A[x,k]<A[y-p[k]+1,k] then writeln(g,A[x,k])
else writeln(g,A[y-p[k]+1,k]);
end;
close(f);
close(g);
end.