Cod sursa(job #1300474)

Utilizator valen.valentinValentin Valeanu valen.valentin Data 24 decembrie 2014 15:00:11
Problema Arbori de intervale Scor 100
Compilator fpc Status done
Runda Arhiva educationala Marime 1.09 kb
program arbint;
type
tabel=array[0..400001] of longint;
buf=array[0..1 shl 17] of char;
var
ff1,ff2:buf;
arb:tabel;
b,c,n,m,i,a:longint;
f1,f2:text;
function max2(a,b:longint):longint;
begin
if a>b then max2:=a else max2:=b;
end;
function query(p,st,dr:longint):longint;
var max,m:longint;
begin
if (st>=b) and (dr<=c) then query:=arb[p] else begin
m:=(st+dr) div 2; max:=0;
if (b<=m) and (c>=st) then max:=max2(max,query(p*2,st,m));
if (c>m) and (b<=dr) then max:=max2(max,query(p*2+1,m+1,dr));
query:=max;
end; end;
procedure update(p,st,dr:longint);
var m:longint;
begin
if st<>dr then begin
m:=(st+dr) div 2;
if b<=m then update(p*2,st,m) else
update(p*2+1,m+1,dr);
arb[p]:=max2(arb[2*p],arb[2*p+1]);
end else
arb[p]:=c;
end;
begin
assign (f1,'arbint.in');
assign (f2,'arbint.out');
reset (f1);
rewrite (f2);
settextbuf(f1,ff1);
settextbuf(f2,ff2);
readln (f1,n,m);
for i:=1 to n do begin
read (f1,c);
b:=i;
update(1,1,n);
end;
for i:=1 to m do begin
readln (f1,a,b,c);
if a=0 then writeln (f2,query(1,1,n)) else update(1,1,n);
end;
close (f1);
close (f2);
end.