Pagini recente » Cod sursa (job #586739) | Cod sursa (job #1157760) | Cod sursa (job #934722) | Cod sursa (job #691672) | Cod sursa (job #335425)
Cod sursa(job #335425)
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.