Pagini recente » Cod sursa (job #526457) | Utilizatori inregistrati la preONI 2008, Runda 1, Clasa a 9-a | Cod sursa (job #309015) | Cod sursa (job #2312379) | Cod sursa (job #760598)
Cod sursa(job #760598)
Program Range_minimum_query;
var r:array [0..100000,0..18] of longint;
a:array [1..100000] of longint;
b1,b2:array [1..1 shl 17] of char;
i,n,m,log,j,s,f,k:longint;
fi,fo:text;
function min(x,y:longint):longint;
begin
if a[x]<a[y] then min:=x else min:=y;
end;
begin
assign(fi,'rmq.in');
assign(fo,'rmq.out');
settextbuf(fi,b1); settextbuf(fo,b2);
reset(fi); rewrite(fo); readln(fi,n,m);
for i:=1 to n do begin readln(fi,a[i]); r[i,0]:=i; end;
log:=trunc(ln(n)/ln(2));
for j:=1 to log do
for i:=1 to n do
if i+(1 shl j)-1>n then break
else r[i,j]:=min(r[i,j-1],r[i+(1 shl (j-1)),j-1]);
for i:=1 to m do begin
readln(fi,s,f);
log:=trunc(ln(f-s+1)/ln(2));
k:=1 shl log;
writeln(fo,a[min(r[s,log],r[f-k+1,log])]);
end;
close(fo);
end.