Cod sursa(job #179584)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 16 aprilie 2008 09:18:09
Problema Arbori de intervale Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.46 kb
program arbint;
var A : array [1..270000] of longint;
    B : array [1..100000] of longint;
    i,j,n,m,p1,p2,mx : longint;
    x : shortint;
    f,g : text;
procedure build(nod,l,r:longint);
var mij : longint;
begin
if l=r then A[nod] := B[l]
else begin
        mij := (l+r) div 2;
        build(2*nod,l,mij);
        build(2*nod+1,mij+1,r);
        if A[2*nod]>A[2*nod+1] then A[nod] := A[2*nod]
                                else A[nod] := A[2*nod+1];
        end;
end;
procedure update(nod,l,r:longint);
var mij : longint;
begin
if l=r then A[nod] := p2
else begin
        mij := (l+r) div 2;
        if p1<=mij then update(2*nod,l,mij)
                   else update(2*nod+1,mij+1,r);
        if A[2*nod]>A[2*nod+1] then A[nod] := A[2*nod]
                                else A[nod] := A[2*nod+1];
        end;
end;
procedure query(nod,l,r:longint);
var mij : longint;
begin
if (p1<=l) and (r<=p2) then if mx<A[nod] then mx := A[nod]
else
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,'arbint.in');
reset(f);
assign(g,'arbint.out');
rewrite(g);
readln(f,n,m);
for i := 1 to n do
read(f,B[i]);
build(1,1,n);
for i := 1 to m do begin
readln(f,x,p1,p2);
if x=0 then begin
            mx := 0;
            query(1,1,n);
            writeln(g,mx);
            end
else update(1,1,n);
end;
close(f);
close(g);
end.