Cod sursa(job #181911)

Utilizator claudiu_syclaudiu claudiu_sy Data 19 aprilie 2008 10:57:48
Problema Arbori de intervale Scor 10
Compilator fpc Status done
Runda Arhiva educationala Marime 1.24 kb
var v:array[1..400000] of integer;
    i,op,rez,n,m,a,b,aux:integer;
    f,g:text;
function max(k,l:integer):integer;
begin
if k>=l then
   max:=k
   else max:=l;
end;

procedure update(nod,inc,sf,poz,val:integer);
var mij:integer;
begin
if (inc=sf) then
   v[nod]:=val
else begin
     mij:=(inc+sf) div 2;
     if (poz<=mij) then
        update(2*nod,inc,mij,poz,val)
     else update(2*nod+1,mij+1,sf,poz,val);
     v[nod]:=max(v[2*nod],v[2*nod+1]);
     end;
end;

procedure query(nod,inc,sf,a,b:integer);
var mij:integer;
begin
if (a<=inc) and (sf<=b) then
   begin
   if (rez<=v[nod]) then
      rez:=max(rez,v[nod]);
   end
else begin
     mij:=(inc+sf) div 2;
     if (a<=mij) then
        query(2*nod,inc,mij,a,b);
     if (mij+1<=b) then
        query(2*nod+1,mij+1,sf,a,b);
     end;
end;


begin
assign(f,'arbint.in');
assign(g,'arbint.out');
reset(f);
rewrite(g);
readln(f,n,m);
for i:=1 to n do
begin
    read(f,aux);
    update(1,1,n,i,aux);
end;
for i:=1 to m do
    begin
    readln(f,op,a,b);
    if op=0 then
       begin
       rez:=-1;
       query(1,1,n,a,b);
       writeln(g,rez);
       end;
    if op=1 then
       update(1,1,n,a,b);
    end;
close(f);
close(g);
end.