Cod sursa(job #179390)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 15 aprilie 2008 21:06:04
Problema Range minimum query Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 0.98 kb
program rmq;
var A : array [1..100000] of longint;
    B : array [1..300000] of longint;
    i,n,m,p1,p2,mn : longint;
    f,g : text;
function min(a,b:longint):longint;
begin
if a>b then min := b
        else min := a;
end;
procedure build(nod,l,r:longint);
var mij : longint;
begin
if l=r then B[nod] := A[l]
else begin
     mij := (l+r) div 2;
     build(2*nod,l,mij);
     build(2*nod+1,mij+1,r);
     B[nod] := min(B[2*nod],B[2*nod+1]);
     end;
end;
procedure query(nod,l,r:longint);
var mij : longint;
begin
if (p1<=l) and (r<=p2) then mn := min(mn,B[nod])
else begin
     mij := (l+r) div 2;
     if p1<=mij then query(2*nod,l,mij);
     if mij<p2 then query(2*nod+1,mij+1,r);
     end;
end;
begin
assign(f,'rmq.in');
reset(f);
assign(g,'rmq.out');
rewrite(g);

readln(f,n,m);
for i := 1 to n do
readln(f,A[i]);

build(1,1,n);

for i := 1 to m do begin
mn := 100000;
readln(f,p1,p2);
query(1,1,n);
writeln(g,mn);
end;

close(f);
close(g);

end.