Pagini recente » Cod sursa (job #787222) | Cod sursa (job #695077) | Cod sursa (job #2870986) | Cod sursa (job #1414761) | Cod sursa (job #408493)
Cod sursa(job #408493)
{DINH QUANG DAT TIN 07-10}
{RMQ}
{$inline on}
{$mode objfpc}
CONST
TFI='rmq.in';
TFO='rmq.out';
MAX=100001;
TYPE
arr1int=array[0..MAX] of longint;
VAR
fi,fo:text;
n,q:longint;
f:array[0..MAX,0..17] of longint;
a:arr1int;
PROCEDURE input;inline;
var
i:longint;
begin
read(fi,n,q);
for i:= 1 to n do read(fi,a[i]);
end;
FUNCTION smin(x,y:longint):longint;
begin
if x>y then exit(y);
exit(x);
end;
PROCEDURE init;inline;
var
i,j,l,k:longint;
begin
for i:= 1 to n do f[i][0]:=a[i];
k:=trunc(ln(n)/ln(2))+1;
for j:= 1 to k do
begin
l:=1 shl j;
for i:= 1 to n do
if i+l-1<=n then
begin
if f[i][j-1]>f[i+1 shl (j-1)][j-1] then f[i][j]:=f[i+1 shl (j-1)][j-1]
else f[i][j]:=f[i][j-1];
end
else break;
end;
end;
FUNCTION find(u,v:longint):longint;inline;
var
l:longint;
begin
l:=trunc(ln(v-u+1)/ln(2));
if f[u][l]>f[v-1 shl l +1][l] then find:=f[v-1 shl l+1][l]
else find:=f[u][l];
end;
PROCEDURE process;inline;
var
res,x,y,i:longint;
begin
for i:= 1 to q do
begin
read(fi,x,y);
res:=find(x,y);
writeln(fo,res);
end;
end;
BEGIN
assign(fi,tfi);reset(fi);
assign(fo,tfo);rewrite(fo);
input;
init;
process;
close(fo);
close(fi);
END.