Cod sursa(job #589770)

Utilizator ion_calimanUAIC Ion Caliman ion_caliman Data 13 mai 2011 18:13:51
Problema Range minimum query Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 0.84 kb
var     a:array[0..20,1..100000] of longint;
        buf:array[1..2200000] of byte;
        n,m,i,j,x,y,k,d:longint;
        f,g:text;

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

begin
  assign(f,'rmq.in');
  assign(g,'rmq.out');
  reset(f);
  rewrite(g);
  settextbuf(g,buf);
  settextbuf(f,buf);
  readln(f,n,m);
  k:=0;
  i:=1;
  while i*2<n do
    begin
      i:=i*2;
      inc(k);
    end;

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

  for i:=1 to k do
  for j:=1 to n do
    if j+(1 shl (i-1)) > n then break else
    begin
      a[i,j]:=min(a[i-1,j],a[i-1,j+(1 shl (i-1))]);
    end;

  for i:=1 to m do
    begin
      readln(f,x,y);
      d:=y-x;
      k:=0;
      while 1 shl (k+1)<=d do inc(k);
      writeln(g,min(a[k,x],a[k,y-(1 shl k)+1]));
    end;
  close(g);
end.