Cod sursa(job #744111)

Utilizator RadioactivMihai Preguza Radioactiv Data 7 mai 2012 16:35:21
Problema Arbori de intervale Scor 0
Compilator fpc Status done
Runda Arhiva educationala Marime 1.19 kb
const val=8;
var t:array[1..val*2]of longint;
    x,z,y,n,m,i,maxim:longint;
    bi,bo:array[1..1 shl 17] of char;
function max(a,b:longint):longint;
begin if a>b then max:=a else max :=b end;


procedure baga(l,x:longint);
Begin
  t[l]:=x;
  l:=l div 2;
  while l<>0 do
    begin
      t[l]:=max(t[2*l],t[2*l+1]);
      l:=l div 2;
    end;
End;


procedure cauta(s,d,niv:longint);
var mij:longint;
Begin
   mij:=(s+d) div 2;
  if (s>=x) and (d<=y) then
    begin
    if t[niv]>maxim then maxim:=t[niv]
    end
    else
      begin

        if x<=mij then cauta(s,mij,2*niv);        if y>=mij+1 then cauta(mij+1,y,niv*2+1);
        if y>=mij+1 then cauta(mij+1,d,2*niv+1);
      end;
End;

BEGIN
  assign(input,'arbint.in');
  settextbuf(input,bi);
  reset(input);
  readln(n,m);
assign(output,'arbint.out');
settextbuf(output,bo);
rewrite(output);
  for i:=1 to n do
    begin
      read(x);
      baga(val+i-1,x);
    end;
  for i:=1 to m do
    begin
      read(z,x,y);
      if z=1 then baga(val+x-1,y)else
        begin
          maxim:=0;
          cauta(1,val,1);
          writeln(maxim);
        end;
    end;
    close(input);
    close(output);
End.