Cod sursa(job #341319)

Utilizator ionutz32Ilie Ionut ionutz32 Data 18 august 2009 09:05:11
Problema Arbori de intervale Scor 30
Compilator fpc Status done
Runda Arhiva educationala Marime 1.31 kb
var a:array[0..16,1..100000] of int64;
n,m,i,j,d,p,b,c,e,q,k:longint;
e2:int64;
f,g:text;
begin
assign(f,'arbint.in');
assign(g,'arbint.out');
reset(f);rewrite(g);
readln(f,n,m);
for i:=1 to n do
    read(f,a[0,i]);
d:=1;
repeat
      p:=p+1;
      d:=d*2;
until d>n;
p:=p-1;
d:=1;
for i:=1 to p do
    begin
    for j:=1 to n-d do
        if a[i-1,j]>a[i-1,j+d] then
           a[i,j]:=a[i-1,j]
        else
            a[i,j]:=a[i-1,j+d];
    d:=d*2;
    end;
q:=p;
for i:=1 to m do
    begin
    readln(f,b,c,e2);
    if b=0 then
       begin
       e:=e2;
       p:=0;
       d:=1;
       while d<=e-c+1 do
             begin
             p:=p+1;
             d:=d*2;
             end;
       p:=p-1;
       d:=d div 2;
       if a[p,c]>a[p,e-d+1] then
          writeln(g,a[p,c])
       else
           writeln(g,a[p,e-d+1]);
       end
    else
        begin
        d:=2;
        a[0,c]:=e2;
        for j:=1 to q do
            begin
            e:=c-d+1;
            if e<=0 then
               e:=1;
            for k:=e to c do
                if a[j-1,k]>a[j-1,k+d div 2] then
                   a[j,k]:=a[j-1,k]
                else
                    a[j,k]:=a[j-1,k+d div 2];
            d:=d*2;
            end;
        end;
    end;
close(f);close(g);
end.