Pagini recente » Cod sursa (job #2080733) | Cod sursa (job #3124469) | Cod sursa (job #1337375) | Cod sursa (job #2192389) | Cod sursa (job #176088)
Cod sursa(job #176088)
program datorii;
var A : array [1..45000] of longint;
S,p2,m,i : longint;
p1,n : integer;
x : byte;
f,g : text;
procedure add(nod:longint;x,y:integer);
var mij : longint;
begin
if x=y then A[nod] := p1
else begin
mij := (x+y) div 2;
if i<=mij then add(2*nod,x,mij)
else add(2*nod+1,mij+1,y);
A[nod] := A[2*nod]+A[2*nod+1];
end;
end;
procedure query(nod:longint;x,y:integer);
var mij : longint;
begin
if (p1<=x) and (y<=p2) then S := S+A[nod]
else begin
mij := (x+y) div 2;
if p1<=mij then query(2*nod,x,mij);
if mij<p2 then query(2*nod+1,mij+1,y);
end;
end;
procedure update(nod:longint;x,y:integer);
var mij : longint;
begin
if x=y then A[nod] := A[nod]-p2
else begin
mij := (x+y) div 2;
if p1<=mij then update(2*nod,x,mij)
else update(2*nod+1,mij+1,y);
A[nod] := A[2*nod]+A[2*nod+1];
end;
end;
begin
assign(f,'datorii.in');
reset(f);
assign(g,'datorii.out');
rewrite(g);
readln(f,n,m);
for i := 1 to n do begin
read(f,p1);
add(1,1,n);
end;
readln(f);
for i := 1 to m do begin
readln(f,x,p1,p2);
if x=1 then begin
S := 0;
query(1,1,n);
writeln(g,S);
end
else update(1,1,n);
end;
close(f);
close(g);
end.