Cod sursa(job #1422746)

Utilizator laura.calimanLaura Caliman laura.caliman Data 19 aprilie 2015 19:09:21
Problema Range minimum query Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.02 kb
var n,m,i,j,k,p,d,b,x,y:longint;
//    buf:array[1..100000] of char;
    a:array[0..30,0..100000] of longint;
    c:array[1..100000] of longint;
    
function min(a,b:longint):longint;
begin
  if a<b then min:=a
  else min:=b
end; 
    
begin
  assign(input,'rmq.in');
  assign(output,'rmq.out');
  reset(input);
  rewrite(output);
//  assign(input,'input.in');
//  settextbuf(input,buf);
  read(n,m);
  j:=1;
  p:=0;
  c[1]:=0;
  read(a[0,1]);
  for i:=2 to n do begin
    if j*2=i then begin
      inc(p);
      j:=j*2;
      c[i]:=p;
    end else
      c[i]:=c[i-1];
    read(a[0,i]);
  end;
  p:=1;
  i:=1;
  while p<=n do begin
    j:=1;
    while j+p <= n do begin
      a[i,j]:=min(a[i-1,j],a[i-1,j+p]);
      inc(j);
    end;
    inc(i);
    p:=p*2;
  end;
//  for k:=0 to i do begin
//    for p:=1 to n do
//      write(a[k,p]:5);
//    writeln;
//  end;
  for k:=1 to m do begin
    read(x,y);
    d:=y-x+1;
    p:=1 shl c[d];
    writeln(min(a[c[d],x],a[c[d],y-p+1]));
  end;
end.