Cod sursa(job #1410371)

Utilizator casianos1996Marc Casian Nicolae casianos1996 Data 31 martie 2015 00:29:21
Problema Range minimum query Scor 90
Compilator fpc Status done
Runda Arhiva educationala Marime 0.83 kb
program rmq;
var     f,g:text;
        d:array[0..17,1..100000] of longint;
        n,m,i,j,x,y,k:longint;
        lg:array[1..100000] of longint;
        bufin,bufout:array[1..1 shl 16] of byte;

function min(st,dr:longint):longint; inline;
var      i:longint;
begin
  min:=st;
  if min>dr then min:=dr;
end;

begin
  assign(f,'rmq.in'); reset(f);
  assign(g,'rmq.out'); rewrite(g);
  settextbuf(f,bufin);
  settextbuf(g,bufout);
  readln(f,n,m);
  lg[1]:=0;
  for i:=2 to n do
    lg[i]:=lg[i div 2]+1;
  for i:=1 to n do
    readln(f,d[0,i]);
  for i:=1 to lg[n] do
    for j:=1 to n-(1 shl (i-1)) do
      d[i,j]:=min(d[i-1,j],d[i-1,j+(1 shl (i-1))]);
  for i:=1 to m do
    begin
      readln(f,x,y);
      k:=lg[y-x+1];
      writeln(g,min(d[k,x],d[k,y-(1 shl k)+1]));
    end;
  close(f);
  close(g);
end.