Cod sursa(job #295087)

Utilizator florin_marius90Florin Marius Popescu florin_marius90 Data 2 aprilie 2009 23:15:06
Problema Arbori de intervale Scor 40
Compilator fpc Status done
Runda Arhiva educationala Marime 1.27 kb
var v:array[1..100000] of longint;
    f,g:text;
    i,j,max,x,n,m,w,a,b:longint;
procedure actualizare(nod,st,dr,a,b:longint);
var mij,d1,d2:longint;
begin
 if (a<=st) and (dr<=b) then v[nod]:=x else
     begin
     mij:=(st+dr) div 2;
     if a<=mij then actualizare(nod*2,st,mij,a,b);
     if b> mij then actualizare(nod*2+1,mij+1,dr,a,b);
     d1:=v[nod*2]; d2:=v[nod*2+1];
     if d1>d2 then v[nod]:=d1 else v[nod]:=d2;
     end;

end;

procedure interogare(nod,st,dr,a,b:longint);
var mij:longint;
begin
 if (a<=st) and (dr<=b) then
      begin
      if max<v[nod] then max:=v[nod];
      end               else
      begin
      mij:=(st+dr) div 2;
      if (a<=mij) then interogare(2*nod,st,mij,a,b);
      if (b>mij) then interogare(2*nod+1,mij+1,dr,a,b);
      end;

end;

begin

assign(f,'arbint.in'); reset(f);
assign(g,'arbint.out'); rewrite(g);
readln(f,n,m);
for i:=1 to 2*n do v[i]:=0;
for i:=1 to n do
 begin
 read(f,x);
 actualizare(1,1,n,i,i);
 end;
readln(f);
for j:=1 to m do
  begin
  readln(f,w,a,b);
   if w=0 then begin
     max:=0;
     interogare(1,1,n,a,b);
     writeln(g,max);
   end else
       begin
       i:=a; x:=b;
       actualizare(1,1,n,i,i);
       end;
  end;
close(f); close(g);

end.