Pagini recente » Cod sursa (job #128772) | Cod sursa (job #1273551) | Cod sursa (job #1235466) | Cod sursa (job #526433) | Cod sursa (job #847352)
Cod sursa(job #847352)
program range_minimum_query_sparse_table;
var f1,f2:text;
n,m,p,k,r,x,y,i:longint;
a:array[0..17,1..100000] of longint;
t:array [0..17] of longint;
bufin,bufout:array [1..100000] of byte;
begin
assign(f1,'rmq.in');
reset(f1);
assign(f2,'rmq.out');
rewrite(f2);
settextbuf(f1,bufin);
settextbuf(f2,bufout);
readln(f1,n,m);
for i:= 1 to n do readln(f1,a[0,i]);
k:=1;p:=1;r:=n-1;
while p<=n do
begin
for i:=1 to r do
if a[k-1,i]>a[k-1,i+p] then a[k,i]:=a[k-1,i+p]
else a[k,i]:=a[k-1,i];
k:=k+1;
r:=r-p;
p:=p*2;
end;
t[0]:=1;
for i:=1 to 17 do t[i]:=t[i-1]*2;
for i:=1 to m do
begin
readln(f1,x,y);
k:=0;
while t[k]<=y-x+1 do inc(k);
dec(k);
if a[k,x]<a[k,y+1-t[k]] then writeln(f2,a[k,x])
else writeln(f2,a[k,y+1-t[k]]);
end;
close(f1);
close(f2);
end.