Pagini recente » Cod sursa (job #1087890) | Cod sursa (job #1748278) | Cod sursa (job #52414) | Cod sursa (job #373340) | Cod sursa (job #307002)
Cod sursa(job #307002)
Program Rmq;
var Intrare,Iesire : text;
a,log2 : array[1..100000] of longint;
mk : array[0..16,1..100000] of longint;
d : array[0..16] of longint;
n,m,i,k,l,x,y,n1,n2 : longint;
procedure preprocesare;
var i,k : longint;
begin
d[0]:=1;
for i:=1 to 16 do d[i]:=2*d[i-1];
for i:=1 to n do log2[i]:=0;
for i:=0 to 16 do log2[d[i]]:=i;
k:=0;
for i:=1 to n do
if log2[i]=0 then log2[i]:=k else k:=log2[i];
for i:=1 to n do mk[0,i]:=a[i];
for k:=1 to log2[n] do begin
for i:=1 to n-d[k-1] do begin
n1:=mk[k-1,i];
n2:=mk[k-1,i+d[k-1]];
if n1<n2 then mk[k,i]:=n1 else mk[k,i]:=n2;
end;
end;
end;
begin
assign(Intrare,'rmq.in');
reset(Intrare);
assign(Iesire,'rmq.out');
rewrite(Iesire);
readln(Intrare,n,m);
for i:=1 to n do readln(Intrare,a[i]);
preprocesare;
for i:=1 to m do begin
readln(Intrare,x,y);
l:=log2[y-x+1];
n1:=mk[l,x];
n2:=mk[l,y-d[l]+1];
if n1<n2 then writeln(Iesire,n1) else writeln(Iesire,n2);
end;
close(Intrare);
close(Iesire);
end.