Pagini recente » Cod sursa (job #1127300) | Cod sursa (job #1207415) | Cod sursa (job #1533974) | Cod sursa (job #838208) | Cod sursa (job #527930)
Cod sursa(job #527930)
var a:array[0..16,1..15000]of longint;
i,j,k,n,m:longint; f1,f2:text;
tip,x,y,s,k1,j1:longint;
function log2(y:longint):longint;
var k,p:longint;
begin
k:=0; p:=y;
while p>0 do
begin
p:=p div 2;
inc(k);
end;
log2:=k;
end;
begin
assign(f1, 'datorii.in');
reset(f1);
assign(f2, 'datorii.out');
rewrite(f2);
readln(f1,n,m);
writeln(n,' ',m);
for i:=1 to n do read(f1,a[0,i]);
k:=1;
while 1 shl k<=n do inc(k);
for j:=1 to k-1 do
for i:=1 to n do
begin
a[j,i]:=a[j-1,i];
if 1 shl (j-1) + i<=n
then a[j,i]:=a[j,i]+a[j-1,i+1 shl(j-1)];
end;
{
for j:=0 to k-1 do
begin
for i:=1 to n do write(a[j,i]:3);
writeln;
end;
}
for j:=1 to m do
begin
readln(f1,tip,x,y);
if tip=1
then
begin
s:=0;
while x<=y do
begin
k1:=log2(y-x+1);
s:=s+a[k1-1,x];
x:=x+(1 shl (k1-1));
end;
writeln(f2,s);
end
else
begin
a[0,x]:=a[0,x]-y;
k1:=0;
while x-(1 shl k1)>0 do
begin
for j1:=k1+1 to k-1 do
dec(a[j1,x-(1 shl k1)], y);
inc(k1);
end;
end
end;
{
for j:=0 to k-1 do
begin
for i:=1 to n do write(a[j,i]:3);
writeln;
end;
}
close(f1);
close(f2);
end.