Pagini recente » Cod sursa (job #3259272) | Cod sursa (job #2163788) | Cod sursa (job #1019450) | Cod sursa (job #1397896) | Cod sursa (job #734127)
Cod sursa(job #734127)
Program meteo;
var a : array[0..100000] of longint;
n,l,k,v : longint;
m : array[-1..10000,-1..25] of longint;
Function pt(f,p : longint) : longint;
var i : longint;
begin
pt:=1;
for i:=1 to p do
pt:=pt*f;
end;
procedure pre;
var i,j : longint;
begin
k:=trunc(ln(n)/ln(2))+1;
for i:=1 to n do
m[i][0]:=i;
{for j:=1 to n do
if a[m[j][0]]<a[m[j+1][0]] then m[j,1]:=m[j,0] else m[j,1]:=m[j+1,0]; }
for j:=1 to k do
for i:=1 to n do
if a[m[i][j-1]]<=a[m[i+pt(2,j-1)][j-1]] then
m[i][j]:=m[i][j-1] else
m[i][j]:=m[i+pt(2,j-1)][j-1];
{ for i:=1 to n do
begin
for j:=0 to k do
write(m[i][j],' ');
writeln;
end; }
end;
Function afla(x,y : longint) : longint;
var i,j,u,r : longint;
begin
i:=x; j:=y;
u:=trunc(ln(j-i+1)/ln(2));
if a[m[i][u]]<=a[m[j-pt(2,u)+1][u]] then
r:=m[i][u] else r:=m[j-pt(2,u)+1][u];
afla:=a[r];
end;
Procedure citire;
var i,x,y : longint;
fin,fout : text;
begin
assign(fin,'rmq.in'); assign(fout,'rmq.out');
reset(fin); rewrite(fout);
readln(fin,n,l);
for i:=1 to n do readln(fin,a[i]);
pre;
for i:=1 to l do
begin
readln(fin,x,y);
writeln(fout,afla(x,y));
end;
close(fin); close(fout);
end;
begin
citire;
end.