Cod sursa(job #1213452)

Utilizator RusuAlexeiRusu Alexei RusuAlexei Data 28 iulie 2014 10:47:29
Problema Range minimum query Scor 80
Compilator fpc Status done
Runda Arhiva educationala Marime 0.89 kb
var rmq:array[0..17,0..100050] of longint;
    lg:array[0..100050] of longint;
    n,m,i,j,lung,x,y,part2:longint;
    bif,bof:array[1..1 shl 16] of char;

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

begin
 assign(input,'rmq.in');
 assign(output,'rmq.out');
 reset(input);
 rewrite(output);
 settextbuf(input,bif);
 settextbuf(output,bof);

  for i:=2 to 100000 do
   lg[i]:=lg[i div 2]+1;

  readln(n,m);

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

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

    while m>0 do
     begin
      readln(x,y);
      lung:=lg[y-x+1];
      part2:=y-x+1-(1 shl lung);
      writeln(min(rmq[lung][x],rmq[lung][x+part2]));
      dec(m);
     end;


 close(input);
 close(output);
{Totusi este trist in lume}
end.