Mai intai trebuie sa te autentifici.

Cod sursa(job #184080)

Utilizator h_istvanHevele Istvan h_istvan Data 22 aprilie 2008 23:28:37
Problema Range minimum query Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 1.21 kb
program p_rmq;
const MAXL = 16;
      MAXN = 100000;
var f,fout:text;
    n,m,i,k,a,b,lg:longint;
    exp:array[0..MAXL] of longint;
    log:array[1..MAXN] of longint;
    rmq:array[0..MAXL,1..MAXN] of longint;

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

begin
     exp[0]:=1;
     for i:=1 to MAXL do
         exp[i]:=2*exp[i-1];
     log[1]:=0;

     assign(fout,'rmq.out');
     assign(f,'rmq.in');
     rewrite(fout);
     reset(f);
     readln(f,n,m);
     for i:=2 to n do
         log[i]:=log[i div 2]+1;

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

     for k:=1 to log[n] do
     begin
          i:=1;
          while(i+exp[k]-1 <= n) do
          begin
               if (rmq[k-1,i] < rmq[k-1,i+exp[k-1]]) then
                  rmq[k,i]:=rmq[k-1,i] else
		  rmq[k,i]:=rmq[k-1,i+exp[k-1]];
               inc(i);
          end;
     end;
     for i:=1 to m do
     begin
          readln(f,a,b);
          lg:=log[b-a+1];
          if (rmq[lg,a] < rmq[lg,b-exp[lg]+1]) then
             writeln(fout,rmq[lg,a]) else
             writeln(fout,rmq[lg,b-exp[lg]+1]);
     end;
     close(f);
     close(fout);
end.