Cod sursa(job #202320)

Utilizator cypherMircea Grecu cypher Data 7 august 2008 13:21:19
Problema Range minimum query Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 0.94 kb
program range_minimum_query;
var a:array[1..100010] of longint;
	p:array[0..18,1..100010] of longint;
	l:array[1..100010] of word;
	n,m:longint;
	
	procedure createtable;
	var i,j,x:longint;
	begin
		for i:=1 to n do p[0,i]:=a[i];
		j:=1; x:=1;
		while (x shl 1)<=n do begin
			for i:=1 to n+1-(x shl 1) do begin
				if p[j-1,i]<p[j-1,i+x] 
				then p[j,i]:=p[j-1,i]
				else p[j,i]:=p[j-1,i+x]; 
			end;
			inc(j); x:=x shl 1;
		end;
	end;
	
	procedure main;
	var f,g:text; 
		i,j,u,v:longint;
		x:byte;
	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;
		
		l[1]:=0;
		for i:=2 to n do l[i]:=l[i shr 1]+1;
		
		for i:=1 to m do begin
			readln(f,u,v);
			x:=l[v-u+1];
			if p[x,u]<p[x,v+1-(1 shl x)] then writeln(g,p[x,u])
				else writeln(g,p[x,v+1-(1 shl x)]);
		end;
		close(f); close(g);
	end;
	
BEGIN
	main;
END.