Cod sursa(job #118272)

Utilizator TudorutzuMusoiu Tudor Tudorutzu Data 24 decembrie 2007 01:56:06
Problema Datorii Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.16 kb
type sir=array[1..15000] of integer;
var a,c:sir;
    f,g:text;
    m:longint;
    n,z,y,i,j:integer;
    x:integer;
function putere(x:integer):integer;
var nr,y,i:integer;
begin
     y:=1; nr:=0;
     while x mod 2 = 0 do
     begin
          inc(nr);
          x:=x div 2;
     end;
     if nr<>0 then for i:=1 to nr do y:=y*2;
     putere:=y;
end;
function interval(x:integer):integer;
var s:integer;
begin
     s:=0;
     while x>0 do
     begin
          s:=s+c[x];
          x:=x-putere(x);
     end;
     interval:=s;
end;
begin
     assign(f,'datorii.in'); reset(f);
     assign(g,'datorii.out'); rewrite(g);
     readln(f,n,m);
     for i:=1 to n do read(f,a[i]);
     readln(f);
     for i:=1 to n do
     begin
          y:=putere(i);
          for j:=i+1-y to i do
              c[i]:=c[i]+a[j];
     end;
     while not eof(f) do
     begin
          readln(f,x,y,z);
          if x=0 then
               while y<=n do
               begin
                    c[y]:=c[y]-z;
                    y:=y+putere(y);
               end
                 else writeln(g,interval(z)-interval(y-1));
     end;
     close(g);
end.