Cod sursa(job #912370)

Utilizator andrei_toaderToader Andrei Sorin andrei_toader Data 12 martie 2013 12:56:49
Problema Arbori de intervale Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.29 kb
program bla;
var f,g:text;
     n,m,i,x,pos,val,a,b,start,finish,maxim:longint;
     maxarb:array[1..400000]  of longint;

function max(a,b:longint):longint;
begin
 if a>b then max:=a
 else max:=b;
end;

procedure update (nod,left,right:longint);
var jum:longint;
begin
 if left=right then
 begin
  maxarb[nod]:=val;
 end
 else
 begin
  jum:=(left+right) div 2;
  if pos<=jum then update (2*nod,left,jum)
  else update (2*nod+1, jum+1,right);
  maxarb[nod]:=max(maxarb[2*nod],maxarb[2*nod+1]);
 end;
end;

procedure query (nod,left,right:longint);
var jum:longint;
begin
 if (start<=left) and (right<=finish) then
 begin
  if maxim<maxarb[nod] then maxim:=maxarb[nod];
 end
 else
 begin
  jum:=(left+right) div 2;
  if start<=jum then query (2*nod,left,jum);
  if jum<finish then query (2*nod+1,jum+1,right);
 end;
end;


begin
 assign (f,'arbint.in'); reset (f);
 assign (g,'arbint.out'); rewrite (G);
 readln (f,n,m);
 for i:=1 to n do
 begin
  read (f,x);
  pos:=i; val:=x;
  update (1,1,n);
 end;
 readln (F);
 for i:=1 to m do
 begin
  read (f,x,a,b);
  if x=0 then
  begin
   maxim:=-1;
   start:=a; finish:=b;
   query(1,1,n);
   writeln (g,maxim);
  end
  else
  begin
   pos:=a; val:=b;
   update(1,1,n);
  end;
 end;
 close (F); close (G);
end.