Cod sursa(job #175885)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 10 aprilie 2008 16:08:23
Problema Arbori de intervale Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.18 kb
program test;
var A : array [1..200000] of longint;
    n,i,m,o,o1,o2,mx : longint;
    f,g : text;

function max(a,b:longint):longint;
begin
if a>b then max := a
        else max := b;
end;

procedure add(nod,x,y,poz,val:longint);
var mij : longint;
begin
if x=y then A[nod] := val
else begin
     mij := (x+y) div 2;
     if poz<=mij then add(2*nod,x,mij,poz,val)
                 else add(2*nod+1,mij+1,y,poz,val);
     A[nod] := max(A[2*nod],A[2*nod+1]);
     end;

end;



procedure request(nod,x,y,p1,p2:longint);
var mij : longint;
begin
if (p1<=x) and (y<=p2) then mx := max(A[nod],mx)
else begin
        mij := (x+y) div 2;
        if p1<=mij then request(2*nod,x,mij,p1,p2);
        if mij<p2 then request(2*nod+1,mij+1,y,p1,p2);
        end;
end;



begin
assign(f,'arbint.in');
reset(f);
assign(g,'arbint.out');
rewrite(g);

readln(f,n,m);
for i := 1 to n do begin
read(f,o1);
add(1,1,n,i,o1);
end;
readln(f);


for i := 1 to m do begin
readln(f,o,o1,o2);
if o=0 then begin
            mx := 0;
            request(1,1,n,o1,o2);
            writeln(g,mx);
            end
else add(1,1,n,o1,o2);
end;

close(f);
close(g);

end.