Cod sursa(job #186679)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 28 aprilie 2008 16:39:51
Problema Arbori de intervale Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.54 kb
var op,x,y,i,a,b,n,m,max,poz,v:longint;
    arb:array[1..300001] of longint;
function maxim(p,q:longint):longint;inline;
   begin
     if p>q then maxim:=p else maxim:=q;
   end;
procedure refresh(nod,li,ls:longint);inline;
     var mij:longint;
      begin
         if li=ls then arb[nod]:=v
               else
                  begin
                    mij:=(li+ls) div 2;
                    if poz<=mij then refresh(2*nod,li,mij)
                                else refresh(2*nod+1,mij+1, ls);
                    arb[nod]:=maxim(arb[2*nod],arb[2*nod+1]);
                  end;
      end;
procedure ask(nod,li,ls:longint); inline;
     var mij:longint;
     begin
       if (x<=li)and(y>=ls) then begin if arb[nod]>max then max:=arb[nod]; end
                            else
                               begin
                                 mij:=(li+ls) div 2;
                                  if x<=mij then ask(2*nod,li,mij);
                                  if y>mij then ask(2*nod+1,mij+1,ls);
                               end;
     end;
begin
assign(input,'arbint.in'); reset(input); assign(output,'arbint.out'); rewrite(output);
readln(n,m);
for i:=1 to n do
   begin
     read(v);
     poz:=i;
     refresh(1,1,n);
   end;
for i:=1 to m do
  begin
     readln(op,a,b);
     if op=0 then
        begin
          max:=0; x:=a; y:=b; ask(1,1,n); writeln(max);
        end
              else
         begin
           v:=b;  poz:=a;refresh(1,1,n);
         end;
  end;
close(input); close(output);
end.