Cod sursa(job #196068)

Utilizator tamas_iuliaTamas Iulia tamas_iulia Data 24 iunie 2008 13:04:21
Problema Arbori de intervale Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.16 kb
const maxn = 100010;
var arb : array[1..maxn*4+1] of longint;
    v : array[1..maxn+1] of longint;
    maxim,n,m,a,b,i,x : longint;
    f,g : text;
function max(x,y : longint):longint;
begin
  if x>y then max:=x else max:=y;
end;

procedure get_max(p,u,nr : longint);
var m : longint;
begin
  if (a<=p)and(u<=b) then
    maxim:=max(maxim,arb[nr])
  else
  begin
    m:=(p+u)div 2;
      if(a<=m)then get_max(p,m,2*nr);
      if(b>m)then get_max(m+1,u,2*nr+1);
  end;
end;

procedure modify(a,p,u,nr : longint);
var m : longint;
begin
  if p=u then arb[nr]:=b
  else
  begin
    m:=(p+u)div 2;
      if (a<=m) then modify(a,p,m,2*nr)
      else modify(a,m+1,u,2*nr+1);
    arb[nr]:=max(arb[2*nr],arb[2*nr+1]);
  end;
end;

begin
  assign(f,'arbint.in');reset(f);
  assign(g,'arbint.out');rewrite(g);
  read(f,n,m);
    for a:=1 to n do
    begin
      read(f,b);
      modify(a,1,n,1);
    end;

    for i:=1 to m do
    begin
      read(f,x,a,b);
        if x<>0 then modify(a,1,n,1)
        else
        begin
          maxim:=0;
          get_max(1,n,1);
          writeln(g,maxim);
        end;
    end;
  close(g);
end.