Pagini recente » Profil | Profil Luncasu_Victor | Profil | Cod sursa (job #202276) | Cod sursa (job #202317)
Cod sursa(job #202317)
program range_minimum_query;
var a:array[1..100010] of longint;
p:array[0..20,1..100010] of longint;
l:array[1..100010] of word;
n,m:longint;
procedure createtable;
var i,j,x:longint;
begin
for i:=1 to n do p[0,i]:=a[i];
j:=1; x:=1;
while (1 shl j)<=n do begin
for i:=1 to n+1-(x shl 1) do begin
if p[j-1,i]<p[j-1,i+x]
then p[j,i]:=p[j-1,i]
else p[j,i]:=p[j-1,i+x];
end;
inc(j); x:=x shl 1;
end;
end;
procedure createlog;
var i:longint;
begin
l[1]:=0;
for i:=2 to n do begin
l[i]:=l[i shr 1]+1;
end;
end;
procedure main;
var f,g:text;
i,j,u,v:longint;
x:byte;
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]);
createtable;
createlog;
for i:=1 to m do begin
readln(f,u,v);
x:=l[v-u+1];
if p[x,u]<p[x,v+1-(1 shl x)] then writeln(g,p[x,u])
else writeln(g,p[x,v+1-(1 shl x)]);
end;
close(f); close(g);
end;
BEGIN
main;
END.