Cod sursa(job #1168516)

Utilizator Mihai_ChihaiMihai Chihai Mihai_Chihai Data 8 aprilie 2014 20:09:59
Problema Range minimum query Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.76 kb
program rmq;
 var a:array[1..100000] of longint;
     m:array[1..100000,0..18]of longint;
     n,t,i,j,x,y,k: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);

   readln(n,t);
   for i:=1 to n do
      readln(a[i]);

   for i:=1 to n do m[i,0]:=a[i];

   j:=1;
   while (1 shl j<=n) do
     begin
       for i:=1 to n do
        m[i,j]:=min(m[i,j-1],m[i + 1 shl (j-1),j-1]);
        inc(j);
     end;
   for i:=1 to t do
     begin
      readln(x,y);
      k:=1;
      while 1 shl k<x-y+1 do inc(k);
      dec(k);
      writeln(min(m[x,k],m[y-1 shl k+1,k]));
     end;
   close(output);
 end.