Pagini recente » Cod sursa (job #1176643) | Atasamentele paginii Viata de dupa olimpiade (I) - Mediul academic | Cod sursa (job #231350) | Monitorul de evaluare | Cod sursa (job #202312)
Cod sursa(job #202312)
program range_minimum_query;
var a:array[1..100010] of longint;
p:array[1..100010,0..20] of longint;
l:array[1..100010] of word;
n,m,max:longint;
procedure createtable;
var i,j:longint;
begin
for i:=1 to n do p[i,0]:=a[i];
j:=1;
while (1 shl j)<=n do begin
for i:=1 to n+1-(1 shl j) do begin
if p[i,j-1]<p[i+(1 shl (j-1)),j-1]
then p[i,j]:=p[i,j-1]
else p[i,j]:=p[i+(1 shl (j-1)),j-1];
end;
inc(j);
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,log:longint;
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);
if u=v then begin writeln(g,a[u]); continue; end;
log:=l[v-u+1];
if p[u,log]<p[v+1-(1 shl log),log] then writeln(g,p[u,log])
else writeln(g,p[v+1-(1 shl log),log]);
end;
close(f); close(g);
end;
BEGIN
main;
END.