Cod sursa(job #372710)

Utilizator philipPhilip philip Data 11 decembrie 2009 13:57:25
Problema Range minimum query Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 0.86 kb
var i,j,n,m,l,r: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;

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
      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;

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