Pagini recente » Cod sursa (job #1399615) | Cod sursa (job #2371850) | Cod sursa (job #2478888) | Cod sursa (job #2663588) | Cod sursa (job #526349)
Cod sursa(job #526349)
var a:array[0..14]of longint;
b:array[0..14,1..100000]of longint;
n,m:longint;
procedure putere;
var i:byte;
begin
for i:=0 to 14 do begin a[i]:=1shl(i); write(a[i],' '); end;
writeln;
end;
procedure matrice;
var i,j:longint;
begin
for i:=1 to 14 do
for j:=1 to n do
if j+a[i-1]<=n then b[i,j]:=b[i-1,j]+b[i-1,j+a[i-1]] else b[i,j]:=b[i-1,j];
end;
function interval(x,y:longint):longint;
var k,p,i:longint;
begin
k:=y-x+1; p:=0;
for i:=14 downto 0 do
begin
if k div a[i]=1 then begin p:=p+b[i,x]; k:=k mod a[i]; x:=x+a[i]; end;
if k=0 then break;
end;
interval:=p;
end;
procedure scadere(x,y:longint);
var k,p,i,j:longint;
begin
i:=0;
while k>1 do
begin
k:=x-a[i]+1;
b[i,k]:=b[i,k]-y;
inc(i);
end;
j:=1;
while p>1 do
begin
p:=x-a[j]+2;
b[j,p]:=b[j,p]-y;
inc(j);
end;
end;
procedure citire;
var i,x,y,z:longint;f,t:text;
begin
assign(f,'datorii.in');
reset(f);
readln(f,n,m);
assign(t,'datorii.out');
reset(t);
for i:=1 to n do read(f,b[0,i]);
matrice;
for i:=1 to m do
begin
readln(x,y,z);
if x=0 then scadere(y,z) else writeln(t,interval(y,z));
end;
close(t);
close(f);
end;
begin
putere;
citire;
end.