Cod sursa(job #766964)

Utilizator iliya785iliya785 iliya785 Data 12 iulie 2012 15:25:41
Problema Range minimum query Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 0.82 kb
const inf = 1000001;
var t,a:array[1..2000000] of longint;
    i,n,l,r,k:longint;
function min(a,b:longint):longint;
 begin
  if a<b then min:=a else min:=b;
 end;
procedure build;
var i:longint; 
 begin
  for i:=n+1 to n shl 1 do t[i]:=a[i - n];
   for i:=n downto 1 do t[i]:=min(t[i shl 1],t[(i shl 1) + 1]);
 end;
function rmq(l,r:longint):longint;
var res:longint; 
 begin
  res:=inf; l:=l+n; r:=r+n;
   while (l<=r) do
    begin
     if l mod 2 <> 0 then res:=min(res,t[l]);
      if r mod 2 = 0 then res:=min(res,t[r]);
       l:=(l + 1) shr 1; r:=(r - 1) shr 1;
    end;
   rmq:=res;
 end;
Begin
Assign(input,'rmq.in');
reset(input);
Assign(output,'rmq.out');
rewrite(output);
read(n,k);
for i:=1 to n do readln(a[i]);
build;
for i:=1 to k do
 begin
  readln(l,r);
  writeln(rmq(l,r));
 end;
end.