Cod sursa(job #528363)

Utilizator elffikkVasile Ermicioi elffikk Data 2 februarie 2011 18:12:38
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.13 kb
var a:array[0..16, 1..17000]of longint;
    i,j,k,n,m,tip,x,y:integer; f1, f2:text;

function log2(n:integer):integer;
var k:integer;
begin
  k:=0;
  while n>0 do
  begin
    n:=n div 2;
    inc(k);
  end;
  log2:=k;
end;

function sum(x:integer):longint;
var s:longint; i:integer;
begin
   s:=0; i:=0;
   while x>0 do
   begin
      if x mod 2 = 1
      then inc(s, a[i,x]);
      x:=x shr 1;
      inc(i);
   end;
   sum:=s;
end;
    
begin
  assign(f1, 'datorii.in');
  reset(f1);
  assign(f2, 'datorii.out');
  rewrite(f2);
  
  readln(f1, n,m);
  for i:=1 to n do read(f1, a[0,i]);
  
  k:=log2(n);
  for j:=1 to k do
    for i:=1 to n shr j do
       a[j,i]:=a[j-1,i*2]+a[j-1,i*2-1];

   
  for i:=1 to m do
  begin
    readln(f1, tip, x,y);
    if tip = 0
    then begin
       for j:=0 to k do
       begin
         dec(a[j, x], y);
         x:=(x-1) div 2 + 1;
       end;
    end
    else begin
        writeln(f2, sum(y)-sum(x-1));
    end
  end;
  {
  for j:=0 to k do
  begin
    for i:=1 to n shr j do write(a[j,i], ' ');
    writeln;
  end;
  }
  close(f1);
  close(f2);
end.