Pagini recente » Cod sursa (job #200177) | Cod sursa (job #2726680) | Cod sursa (job #2289889) | Cod sursa (job #1773505) | Cod sursa (job #299159)
Cod sursa(job #299159)
// Arhiva educationala - Range minimum Query
var
n, m, i, k, x, y, l, a, b, aa, bb : longint;
log : array[0..100000] of byte;
min : array[0..18,1..100000] of longint;
f, g: text;
begin
assign (f, 'rmq.in'); assign (g, 'rmq.out');
reset (f); rewrite (g);
readln (f, n, m);
for i := 1 to n do readln (f, min[0, i]);
for i := 2 to n do log[i] := log[i shr 1] + 1;
for k := 1 to log[n] do
begin
bb := k - 1; aa := 1 shl bb;
for i := 1 to n - (1 shl k) + 1 do
begin
a := min[bb, i]; b := min[bb, i + aa];
if (a < b) then min [k, i] := a else min [k, i] := b;
end;
end;
for i := 1 to m do
begin
readln (f, x, y);
l := log[y - x + 1];
a := min[l, x]; b := min[l, y + 1 - (1 shl l)];
if (a < b) then writeln (g, a) else writeln (g, b);
end;
close (f); close (g);
end.