Cod sursa(job #1168430)

Utilizator Mihai_ChihaiMihai Chihai Mihai_Chihai Data 8 aprilie 2014 15:34:26
Problema Range minimum query Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.13 kb
program rmq_sqrt_n;
 const nmax=100000;
     inf=1 shl 30;
 var a:array[1..nmax] of longint;
     n,i,t,j,x,y,l,p,size,min:longint;
     m:array[1..400] of longint;
 function min1(a,b:longint):longint;
  begin
    if a>b then exit(b);
    exit(a);
  end;

 begin
  assign(input,'rmq.in');
  assign(output,'rmq.out');
  reset(input);
  rewrite(output);
  readln(n,t);
  l:=trunc(sqrt(n)) ;
  for i:=1 to n do readln(a[i]);
  i:=1;
  while i<=n do
    begin
      p:=inf;
      for j:=1 to min1(l,n-i+1) do
        if p>a[i+j-1] then
          p:=a[i+j-1];
      inc(size);
      m[size]:=p;
      i:=i+l;
    end;
  while t>0 do
     begin
       readln(x,y);
       p:=l;
       while x>p do p:=p+l;
       min:=inf;
       for i:=x to p do
          if min>a[i] then min:=a[i];
      j:=p div l+1;
      while p+l < y do
        begin
          if m[j]<min then min:=m[j];
          inc(j);
          inc(p,l);
        end;
      for i:=p to y do
        if a[i]<min then min:=a[i];
     writeln(min);
     dec(t);
  end;





{  for i:=1 to size do write(m[i],' ');  }
  close(output);
 end.