Cod sursa(job #167987)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 30 martie 2008 15:06:03
Problema Arbori de intervale Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.29 kb
var A : array [1..500000] of longint;
    m,n,i,j,x,i1,i2,max : longint;
    f,g : text;
function maxim(x,y:longint):longint;
begin
if x>y then maxim := x
        else maxim := y;
end;

procedure update(ni,st,dr,poz,x:longint);
var mij : longint;
begin

if st=dr then A[ni] := x
else begin
        mij := (st+dr) div 2;
        if poz<=mij then update(2*ni,st,mij,poz,x)
                    else update(2*ni+1,mij+1,dr,poz,x);
        A[ni] := maxim(A[2*ni],A[2*ni+1]);
        end;
end;

procedure caut(ni,st,dr,goi,gof: longint);
var mij : longint;
begin
if (goi<=st)and(dr<=gof) then
                           if max<A[ni] then max := A[ni]
                           else
else
begin
     mij := (st+dr) div 2;
     if (goi<=mij) then caut(2*ni,st,mij,goi,gof);
     if (mij<gof) then caut(2*ni+1,mij+1,dr,goi,gof);
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,x);
         update(1,1,n,i,x);
         end;


readln(f);


for i := 1 to m do begin
readln(f,x,i1,i2);
if x=0 then begin
            max := 0;
            caut(1,1,N,i1,i2);
            writeln(g,max);
            end
else update(1,1,N,i1,i2);

end;



close(f);
close(g);


end.