Cod sursa(job #244041)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 14 ianuarie 2009 15:25:57
Problema Range minimum query Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.43 kb
var arb:array[1..300001] of longint;
    i,a,b,min,v,poz,n,m:longint;
function mini(a,b:longint):longint;
   begin
     if a<b then mini:=a
            else mini:=b;
   end;
procedure refresh(nod,st,dr:longint);
    var mij:longint;
    begin
      if st=dr then arb[nod]:=v
               else
                  begin
                    mij:=(st+dr) div 2;
                    if poz<=mij then refresh(2*nod,st,mij)
                                else refresh(2*nod+1,mij+1,dr);
                    arb[nod]:=mini(arb[2*nod],arb[2*nod+1]);
                  end;
    end;
procedure ask(nod,st,dr:longint);
   var mij:longint;
   begin
     if (a<=st)and(b>=dr) then
                             begin
                               if arb[nod]<min then min:=arb[nod];
                             end
                          else
                             begin
                               mij:=(st+dr) div 2;
                               if a<=mij then ask(2*nod,st,mij);
                               if b>mij then ask(2*nod+1,mij+1,dr);
                             end;
   end;
begin
assign(input,'rmq.in'); reset(input);
assign(output,'rmq.out'); rewrite(output);
readln(n,m);
for i:=1 to n do
   begin
     readln(v); poz:=i;
     refresh(1,1,n);
   end;
for i:=1 to m do
   begin
      min:=100001;
     readln(a,b);
     ask(1,1,n);
     writeln(min);
   end;
close(input);
close(output);
end.