Cod sursa(job #162285)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 19 martie 2008 20:47:35
Problema Range minimum query Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.82 kb
var v:array[0..30,0..100000]of longint;
    a,l:array[0..100000]of longint;
    n,i,j,k,m,u,x,y,o:longint;
    f,q:text;
function min(a,b:longint):longint;
begin
   if a<b then min:=a
          else min:=b;
end;
begin
   assign(f,'rmq.in');
   assign(q,'rmq.out');
   rewrite(q);
   reset(f);
   read(f,n,m);
   for i:=1 to n do
   begin
      if 1 shl (l[i-1]+1)=i then l[i]:=l[i-1]+1
                            else l[i]:=l[i-1];
      read(f,a[i]);
      v[i,0]:=a[i];
   end;

   while 1 shl(u+1)<=n do
      u:=u+1;

   for j:=1 to u do
      for i:=1 to n-(1 shl j)+1 do
         v[j,i]:=min(v[j-1,i],v[j-1,i+(1 shl(j-1))]);

   for i:=1 to m do
     begin
       read(f,x,y);
       o:=l[y-x];
       writeln(q,min(v[o][x],v[o][y-(1 shl o)+1]));
     end;

   close(f);
   close(q);
end.