Cod sursa(job #174811)

Utilizator cheery_g1rlHaller Emanuela cheery_g1rl Data 9 aprilie 2008 11:52:55
Problema Arbori de intervale Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.54 kb
Program arbori_intervale;
var f,g:text;
    op,x,y,i,a,b,n,m,max,poz,val:longint;
    arb:array[1..300001] of longint;
function maxim(i,j:longint):longint;inline;
    begin
      if i>j then maxim:=i
         else maxim:=j;
    end;

procedure refresh(nod,li,ls:longint);
      var mij:longint;
      begin
        if li=ls  then arb[nod]:=val
           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);
    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 mij<y then ask(2*nod+1,mij+1,ls);
             end;
    end;
begin
assign(input,'arbint.in'); reset(input);
readln(n,m);
for i:=1 to n do
    begin
      read(val);
      poz:=i;
      refresh(1,1,n);
    end;
{readln(input);      }
assign(output,'arbint.out'); rewrite(output);
for i:=1 to m do
  begin
    readln(op,a,b);
    if op=0 then
         begin
           max:=-1;
           x:=a;
           y:=b;
           ask(1,1,n);
           writeln(max);
         end
             else
         begin
           val:=b;
           poz:=a;
           refresh(1,1,n);
         end;
  end;
close(input);
close(output);
end.