Pagini recente » Cod sursa (job #582319) | Cod sursa (job #1946272) | Cod sursa (job #2134029) | Cod sursa (job #272859) | Cod sursa (job #1418340)
var n,m,i,j,k,x,y:longint;
a,b:array[1..100000] of longint;
buf:array[1..100000] of char;
function min(a,b:longint):longint;
begin
if a<b then min:=a
else min:=b
end;
function max(a,b:longint):longint;
begin
if a>b then max:=a
else max:=b
end;
procedure bmin;
var i,j,r:longint;
begin
j:=0;
i:=0;
while i<n do begin
inc(j);
inc(i);
r:=i;
b[j]:=i;
for i:=r to r+k-1 do begin
if a[b[j]]>a[i] then b[j]:=i;
if i=n then break;
end;
end;
// for i:=1 to j do write(a[b[i]],' ');
// writeln;
end;
procedure rmq(x,y:longint);
var i,j,m,x1,y1,m1,m2:longint;
begin
x1:=((x-1) div k) + 1;
if (x mod k <> 1) then
inc(x1);
y1:=(y-1) div k;
if (y mod k = 0) then
inc(y1);
// calculam minimul din intervalele intregi de lungime k
m:=a[x];
// writeln(k, ' ', x1,' ',y1);
for i:=x1 to y1 do begin
if m>a[b[i]] then m:=a[b[i]];
end;
for i:=x to min((x1-1)*k, y) do
if m>a[i] then m:=a[i];
for i:=y downto max(y1*k+1, x) do
if m>a[i] then m:=a[i];
writeln(m);
end;
begin
// assign(input,'input.in');
assign(input,'rmq.in');
assign(output,'rmq.out');
reset(input);
rewrite(output);
settextbuf(input,buf);
read(n,m);
k:=trunc(sqrt(n));
for i:=1 to n do read(a[i]);
bmin;
for i:=1 to m do begin
read(x,y);
rmq(x,y);
end;
end.