Cod sursa(job #299159)

Utilizator belgun_adrianBelgun Dimitri Adrian belgun_adrian Data 6 aprilie 2009 16:43:36
Problema Range minimum query Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 0.83 kb
// 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.