Cod sursa(job #166119)

Utilizator gurneySachelarie Bogdan gurney Data 27 martie 2008 14:26:08
Problema Range minimum query Scor 70
Compilator fpc Status done
Runda Arhiva educationala Marime 0.97 kb
program rmq;
  const
    fin='rmq.in';
    fout='rmq.out';
    nmax=100000;
var
  a,lg:array[0..nmax] of longint;
  i,j,l,maxlog,n,m,x,y:longint;
  min:array[1..nmax,0..18] of longint;

function minim(x,y:longint):longint;
  begin
    if x<y then
      minim:=x
    else
      minim:=y;
  end;

begin
  assign(input,fin);
  assign(output,fout);
    rewrite(output);
    reset(input);
    readln(n,m);
    lg[1]:=0;
    for i:=2 to n do
      lg[i]:=lg[i shr 1]+1;
    for i:=1 to n do
      readln(a[i]);
    maxlog:=lg[n];
    for i:=1 to n do
      min[i,0]:=a[i];
    for j:=1 to maxlog do
      for i:=1 to n-(1 shl j)+1 do
        if min[i,j-1]<min[i+(1 shl (j-1)),j-1] then
          min[i,j]:=min[i,j-1]
        else
          min[i,j]:=min[i+(1 shl (j-1)),j-1];
    for i:=1 to m do
      begin
        readln(x,y);
        l:=lg[y-x+1];
        writeln(minim(min[x,l],min[y-(1 shl l)+1,l]));
      end;
  close(output);
  close(input);
end.