Cod sursa(job #1213438)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 28 iulie 2014 10:06:34
Problema Range minimum query Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 0.96 kb
program range_minimum_query_sparse_table;
  var f1,f2:text;
      n,m,p,k,r,x,y,i:longint;
      a:array[0..17,1..100000] of longint;
      t:array [0..17] of longint;
      bufin,bufout:array [1..100000] of byte;
begin
  assign(f1,'rmq.in');
  reset(f1);
  assign(f2,'rmq.out');
  rewrite(f2);
  settextbuf(f1,bufin);
  settextbuf(f2,bufout);
  readln(f1,n,m);
  for i:= 1 to n do readln(f1,a[0,i]);
  k:=1;p:=1;r:=n-1;
  while p<=n do
    begin
      for i:=1 to r do
        if a[k-1,i]>a[k-1,i+p] then a[k,i]:=a[k-1,i+p]
                               else a[k,i]:=a[k-1,i];
      k:=k+1;
      r:=r-p;
      p:=p*2;
    end;
  t[0]:=1;
  for i:=1 to 17 do t[i]:=t[i-1]*2;
  for i:=1 to m do
    begin
      readln(f1,x,y);
      k:=0;
      while t[k]<=y-x+1 do inc(k);
      dec(k);
      if a[k,x]<a[k,y+1-t[k]] then writeln(f2,a[k,x])
                              else writeln(f2,a[k,y+1-t[k]]);

    end;
  close(f1);
  close(f2);
end.