Cod sursa(job #1170545)

Utilizator Mihai_ChihaiMihai Chihai Mihai_Chihai Data 13 aprilie 2014 19:55:42
Problema Arbori de intervale Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.4 kb
program arbint;
 const nmax=100000;
      inf=1 shl 30;
 var v:array[1..10*nmax]  of longint;
     n,m,op,a,b,val,i,j,max:longint;
 function maxim(a,b:longint):longint;
 begin
  if a>b then maxim:=a else maxim:=b;
 end;

 procedure Actualizare(nod,st,dr,poz,val:longint);
  var mij:longint;
 begin
   if st=dr then v[nod]:=val
   else begin
        mij:=(st+dr)div 2;
        if poz<=mij then Actualizare(2*nod,st,mij,poz,val)
         else Actualizare(2*nod+1,mij+1,dr,poz,val);
        v[nod]:=maxim(v[2*nod],v[2*nod+1]);
        end;
 end;
 procedure Interogare(nod,st,dr,a,b:longint);
  var mij:longint;
 begin
   if (a<=st)and(dr<=b)then max:=maxim(max,v[nod])
       else begin
           mij:=(st+dr) div 2;
           if a<=mij then Interogare(2*nod,st,mij,a,b);
           if b>mij then Interogare(2*nod+1,mij+1,dr,a,b);
           end;
 end;
 begin
   assign(input,'arbint.in');
   assign(output,'arbint.out');
   reset(input);
   rewrite(output);
   readln(n,m);
   for i:=1 to n do begin
                read(a);
                Actualizare(1,1,n,i,a);
                end;
   for i:=1 to m do
     begin
       readln(op,a,b);
       if op=0 then begin
                max:=-inf;
                interogare(1,1,n,a,b);
                writeln(max);
                end
                else
                Actualizare(1,1,n,a,b);
     end;
   close(output);
 end.