Cod sursa(job #760598)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 22 iunie 2012 12:16:47
Problema Range minimum query Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 0.88 kb
Program Range_minimum_query;
 var r:array [0..100000,0..18] of longint;
     a:array [1..100000] of longint;
     b1,b2:array [1..1 shl 17] of char;
    i,n,m,log,j,s,f,k:longint;
    fi,fo:text;
function min(x,y:longint):longint;
 begin
  if a[x]<a[y] then min:=x else min:=y;
 end;
begin
 assign(fi,'rmq.in');
  assign(fo,'rmq.out');
 settextbuf(fi,b1); settextbuf(fo,b2);
 reset(fi); rewrite(fo); readln(fi,n,m);
  for i:=1 to n do begin readln(fi,a[i]); r[i,0]:=i; end;
 log:=trunc(ln(n)/ln(2));
  for j:=1 to log do
   for i:=1 to n do
    if i+(1 shl j)-1>n then break
     else r[i,j]:=min(r[i,j-1],r[i+(1 shl (j-1)),j-1]);
  for i:=1 to m do begin
                  readln(fi,s,f);
                    log:=trunc(ln(f-s+1)/ln(2));
                     k:=1 shl log;
                   writeln(fo,a[min(r[s,log],r[f-k+1,log])]);
                  end;
  close(fo);
end.