Cod sursa(job #156749)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 12 martie 2008 18:44:26
Problema Arbori de intervale Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.23 kb
//arbori de intervale
const nmax=100001;
var fi,fo:text;
    a,b,i,n,m,x,op,rez,j:longint;
    H:array[1..4*nmax]of longint;

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

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

procedure query(nod,li,lf:longint);
var mij:longint;
begin
  if (a<=li)and(lf<=b) then
    begin
      if rez<H[nod] then rez:=H[nod];
      exit;
    end;
  mij:=(li+lf) div 2;
  if a<=mij then query(2*nod,li,mij);
  if b>mij then query(2*nod+1,mij+1,lf);
end;

begin
  assign(fi,'arbint.in'); reset(fi);
  assign(fo,'arbint.out'); rewrite(fo);
  read(fi,n,m);
  for i:=1 to N do
    begin
      read(fi,x);
      update(1,1,N,i,x);
    end;
  for i:=1 to m do
    begin
      read(fi,op,a,b);
      if op=0 then
        begin
          rez:=0;
          query(1,1,n);
          writeln(fo,rez);
        end
      else
        update(1,1,N,a,b);
    end;
  close(fi);
  close(fo);
end.