Pagini recente » Cod sursa (job #945392) | Cod sursa (job #135156) | Cod sursa (job #279965) | Cod sursa (job #1410362)
program RMQ;
var f,g:text;
bufin,bufout:array[1..1 shl 16] of byte;
n,m,i,j,k:longint;
d:array[0..17,1..100000] of longint;
v:array[1..100000] of longint;
procedure readdata;
var i:longint;
begin
assign(f,'rmq.in'); reset(f);
assign(g,'rmq.out'); rewrite(g);
settextbuf(f,bufin); settextbuf(g,bufout);
readln(f,n,m);
for i:=1 to n do
readln(f,v[i]);
end;
function min(st,dr:longint):longint;
var i:longint;
begin
min:=maxlongint;
for i:=st to dr do
if min>v[i] then min:=v[i];
end;
procedure rezolva;
var pow,i,j,k:longint;
begin
pow:=1;
for i:=1 to n do
d[0,i]:=v[i];
for i:=1 to trunc(ln(n)/ln(2)) do
begin
pow:=pow*2;
for j:=1 to n do
begin
if j+pow-1>n then break;
d[i,j]:=min(j,j+pow-1);
end;
end;
end;
function gasestek(x,y:longint; var pow:longint):longint;
var i:longint;
begin
pow:=1;
gasestek:=0;
while 2*pow<y-x do
begin
pow:=pow*2;
gasestek:=gasestek+1;
end;
end;
procedure afis;
var pow,k,i,x,y:longint;
begin
for i:=1 to m do
begin
readln(f,x,y);
k:=gasestek(x,y,pow);
if d[k,x]<d[k,y-pow+1] then writeln(g,d[k,x])
else writeln(g,d[k,y-pow+1]);
end;
end;
begin
readdata;
rezolva;
{ for i:=0 to trunc(ln(n)/ln(2)) do
begin
for j:=1 to n do
write(d[i,j],' ');
writeln;
end; }
afis;
close(g);
close(f);
end.