Cod sursa(job #372715)

Utilizator philipPhilip philip Data 11 decembrie 2009 14:06:33
Problema Range minimum query Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 0.79 kb
var i,j,n,m,l,r,logg:longint;
    p:array[0..100000,0..18] of longint; {17}
    log:array[1..100000] of byte;
    bufin:array[1..100000] of byte;
    inpu,outpu:text;

function min(a,b:longint):longint;
 begin
   if a<b then min:=a else min:=b;
 end;

begin
  assign(inpu,'rmq.in');
  reset(inpu);
  settextbuf(inpu,bufin);
  assign(outpu,'rmq.out');
  rewrite(outpu);
  readln(inpu,n,m);
  for i:=1 to n do readln(inpu,p[i,0]);
  for i:=2 to n do
    log[i]:=log[i shr 1]+1;

  for j:=1 to log[n] do
    for i:=1 to n-(1 shl j)+1 do begin
       p[i,j]:=min(p[i,j-1],p[i+(1 shl (j-1)),j-1]);
    end;

  for i:=1 to m do begin
    readln(inpu,l,r);
    logg:=log[r-l+1];
    writeln(outpu,min(p[l,logg],p[r-(1 shl logg)+1,logg]));
    end;
  close(inpu);
  close(outpu);
end.