Cod sursa(job #202309)

Utilizator cypherMircea Grecu cypher Data 7 august 2008 12:54:19
Problema Range minimum query Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.92 kb
program range_minimum_query;
var a:array[1..100010] of longint;
	p:array[1..100010,0..20] of longint;
	n,m:longint;
	
	procedure createtable;
	var i,j:longint;
	begin
		for i:=1 to n do p[i,0]:=a[i];
		j:=1;
		while (1 shl j)<=n do begin
			for i:=1 to n+1-(1 shl j) do begin
				if p[i,j-1]<p[i+(1 shl (j-1)),j-1] 
				then p[i,j]:=p[i,j-1]
				else p[i,j]:=p[i+(1 shl (j-1)),j-1]; 
			end;
			inc(j);
		end;
	end;
	
	procedure main;
	var f,g:text; 
		i,j,u,v,log:longint;
	begin
		assign(f,'rmq.in'); reset(f);
		assign(g,'rmq.out'); rewrite(g);
		readln(f,n,m);
		for i:=1 to n do readln(f,a[i]);
		createtable;
		for i:=1 to m do begin
			readln(f,u,v);
			if u=v then begin writeln(g,a[u]); continue; end;
			log:=trunc(ln(v-u+1)/ln(2));
			if p[u,log]<p[v-(1 shl log),log] then writeln(g,p[u,log])
				else writeln(g,p[v+1-(1 shl log),log]);
		end;
		close(f); close(g);
	end;
	
BEGIN
	main;
END.