Cod sursa(job #329283)

Utilizator ionutz32Ilie Ionut ionutz32 Data 5 iulie 2009 17:34:21
Problema Range minimum query Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.77 kb
var a:array[0..17,1..100000] of 1..100000;
n,m,i,x,y,p,d:longint;
f,g:text;
bufin:array[1..65000] of byte; 
function min(p1,p2:longint):longint;
         begin
         if p1<p2 then
            min:=p1
         else
             min:=p2;
         end;
begin
assign(f,'rmq.in');
assign(g,'rmq.out');
reset(f);rewrite(g);
settextbuf(f,bufin);
readln(f,n,m);
for i:=1 to n do
    readln(f,a[0,i]);
d:=1;
repeat
      d:=d*2;
      p:=p+1;
      for i:=1 to n-d+1 do
          a[p,i]:=min(a[p-1,i],a[p-1,i+d div 2]);
until d>=n;
for i:=1 to m do
    begin
    readln(f,x,y);
    d:=1;p:=0;
    repeat
          d:=d*2;
          p:=p+1;
    until d>y-x+1;
    d:=d div 2;
    p:=p-1;
    writeln(g,min(a[p,x],a[p,y-d+1]));
    end;
close(f);close(g);
end.