Pagini recente » Cod sursa (job #2078381) | Cod sursa (job #1276934) | Cod sursa (job #1723705) | Cod sursa (job #817025) | Cod sursa (job #528899)
Cod sursa(job #528899)
var a:array[0..100]of longint;
b:array[1..100000]of longint;
c:array[1..100000]of longint;
d:array[1..100000]of longint;
n,m:longint;
procedure init;
var i,k:longint;
begin
k:=1; a[0]:=1;
for i:=1 to 14 do begin k:=k*2; a[i]:=k; end;
end;
procedure assd;
var i,j:longint;
begin
for i:=1 to 14 do
begin
j:=a[i];
while j<=n+1 do
begin
inc(b[j]);
j:=j+a[i];
end;
end;
end;
procedure vect;
var i,j,k:longint;
begin
for i:=1 to n do
begin
k:=0;
for j:=i-a[b[i]]+1 to i do k:=k+d[j];
c[i]:=k;
end;
writeln;
end;
procedure modif(x,y:longint);
begin
while x<=n do
begin
c[x]:=c[x]-y;
x:=x+a[b[x]];
end;
end;
function sum(x:longint):longint;
var k:longint;
begin
k:=0;
while x>0 do
begin
k:=k+c[x];
x:=x-a[b[x]];
end;
sum:=k;
end;
procedure citire;
var i,x,y,z:longint; f,t:text;
begin
assign(f,'datorii.in');
reset(f);
assign(t,'datorii.out');
rewrite(t);
readln(f,n,m);
for i:=1 to n do read(f,d[i]);
init;
assd;
vect;
readln(f);
for i:=1 to m do
begin
readln(f,x,y,z);
if x=0 then modif(y,z) else
if (x=1)and(y=1)and(sum(z)>0) then writeln(t,sum(z)) else writeln(t,sum(z)-sum(y-1));
end;
close(t);
close(f);
end;
begin
citire;
end.