Cod sursa(job #1213431)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 28 iulie 2014 09:50:59
Problema Range minimum query Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 0.88 kb
program rmq;
  var bufin,bufout:array [1..100000] of byte;
      n,m,i,j,k,pow,l,r:longint;
      a:array [0..16,1..100000] of longint;

function min(u,v:longint):longint;
  begin
    if u<v then min:=u else min:=v;
  end;

begin
  assign(input,'rmq.in');
  reset(input);
  settextbuf(input,bufin);
  assign(output,'rmq.out');
  rewrite(output);
  settextbuf(output,bufout);

  readln(n,m);
  for i:=1 to n do readln(a[0,i]);

  pow:=2; j:=1;
  while pow<=n do
    begin
      for i:=1 to n-pow+1 do
        a[j,i]:=min(a[j-1,i],a[j-1,i+pow div 2]);
      pow:=pow*2;inc(j);
    end;

  for i:=1 to m do
    begin
      readln(l,r);
      pow:=1;k:=0;
      while pow<=r-l+1 do
        begin
          pow:=pow*2;
          inc(k);
        end;
      dec(k);
      pow:=pow div 2;
      writeln(min(a[k,l],a[k,r-pow+1]));
    end;
  close(output);
end.