Cod sursa(job #335425)

Utilizator ionutz32Ilie Ionut ionutz32 Data 29 iulie 2009 22:07:41
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.15 kb
var a:array[1..15000,1..13] of longint;
m,n,i,bit,p,q,d,j,s,c,k,max:longint;
f,g:text;
procedure calc(x,y:longint);
          begin
          d:=1;
          j:=1;
          while d*2<=y-x+1 do
                begin
                j:=j+1;
                d:=d*2;
                end;
          s:=s+a[x,j];
          if y-x+1>d then
             calc(x+d,y);
          end;
begin
assign(f,'datorii.in');
assign(g,'datorii.out');
reset(f);rewrite(g);
readln(f,n,m);
for i:=1 to n do
    read(f,a[i,1]);
readln(f);
d:=1;
i:=1;
repeat
      d:=d*2;
      i:=i+1;
      for j:=1 to n-d+1 do
          a[j,i]:=a[j,i-1]+a[j+d div 2,i-1];
until d*2>n;
c:=i;
for i:=1 to m do
    begin
    readln(f,bit,p,q);
    if bit=1 then
       begin
       s:=0;
       calc(p,q);
       writeln(g,s);
       end
    else
        begin
        d:=1;
        for j:=1 to c do
            begin
            if p>d then
                max:=p-d+1
            else
                max:=1;
            for k:=max to p do
                a[k,j]:=a[k,j]-q;
            d:=d*2;
            end;
        end;
    end;
close(f);close(g);
end.