Cod sursa(job #1213369)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 27 iulie 2014 22:37:49
Problema Range minimum query Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.86 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 pow+i-1 do
        a[j,i]:=min(a[j-1,i],a[j-1,i+pow div 2]);
      pow:=pow*2;inc(k);
    end;

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