Pagini recente » Cod sursa (job #1093859) | Cod sursa (job #949253) | Cod sursa (job #503990) | Cod sursa (job #1362922) | Cod sursa (job #587541)
Cod sursa(job #587541)
var a:array[0..20,1..1000000]of longint;
buf:array[1..1000000]of longint;
buf2:array[1..1000000]of longint;
b:array[0..20]of longint;
n,m:longint;
procedure putere;
var i:integer;
begin
b[0]:=1;
for i:=1 to 17 do
b[i]:=b[i-1]*2;
end;
function min(a,b:longint):longint;
begin
if a>b then min:=b else min:=a;
end;
procedure mat;
var i,j:longint;
begin
for i:=1 to 17 do
begin
for j:=1 to n do a[i,j]:=min(a[i-1,j],a[i-1,min(b[i-1]+j,n)]);
end;
end;
procedure afis;
var i,j:longint;
begin
for i:=0 to 17 do
begin
for j:=1 to n do write(a[i,j],' ');
writeln;
end;
end;
function cal(x,y:longint):longint;
var k,i,m:longint;
begin
if x=y then m:=a[0,x] else
begin
k:=y-x+1;
for i:=17 downto 1 do
if k div b[i]=1 then
begin
m:=min(a[i,x],a[i,y-b[i]+1]);
break;
end;
end;
cal:=m;
end;
procedure body;
var i,x,y,l:longint;f,g:text;
begin
assign(f,'rmq.in');
reset(f);
settextbuf(f,buf);
assign(g,'rmq.out');
rewrite(g);
settextbuf(g,buf2);
readln(f,n,m);
for i:=1 to n do readln(f,a[0,i]);
mat;
for i:=1 to m do
begin
readln(f,x,y);
l:=cal(x,y);
writeln(g,l);
end;
close(g);
close(f);
end;
begin
putere;
body;
end.