Cod sursa(job #921983)

Utilizator Buzu_Tudor_RoCont vechi Buzu_Tudor_Ro Data 21 martie 2013 21:05:08
Problema Range minimum query Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 0.77 kb
Program p1;
var fi,fo:text; b:array[0..1 shl 20] of char;
    i,j,n,m,lim,x,y,k:longint; a:array[0..100005,0..18] of longint;

Function min(a,b:longint):longint;
begin
    if a<b then min:=a else min:=b;
end;

Procedure rmq;
begin
    lim:=0;
    while (1 shl lim)<n do inc(lim);

    for j:=1 to lim do
       for i:=1 to n+1-(1 shl j) do
          a[i,j]:=min(a[i,j-1],a[i+(1 shl (j-1)),j-1]);
end;

begin
    assign(fi,'rmq.in'); reset(fi);
    assign(fo,'rmq.out'); rewrite(fo);
    settextbuf(fi,b); readln(fi,n,m);

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

    rmq;

    for i:=1 to m do begin
                     readln(fi,x,y);
                     writeln(fo,min(a[x,k],a[y-(1 shl k)+1,k]));
                     end;

    close(fi); close(fo);
end.