单点增加,区间求和
program ex1; var data:array[0..400000]of int64; a:array[0..100000]of int64; n,i,m,c,x,y:longint; procedure build(p,l,r:longint); var mid:longint; begin if l=r then data[p]:=a[r] else if l<r then begin mid:=(l+r) div 2; build(p*2,l,mid); build(p*2+1,mid+1,r); data[p]:=data[p*2]+data[p*2+1]; end; end; procedure add(p,l,r,x,num:longint); var mid:longint; begin if l=r then inc(data[p],num) else begin mid:=(l+r) div 2; if x<=mid then add(p*2,l,mid,x,num); if x>mid then add(p*2+1,mid+1,r,x,num); data[p]:=data[p*2]+data[p*2+1]; end; end; function query(p,l,r,x,y:longint):int64; var mid,ans:int64; begin if (x<=l)and(r<=y) then exit(data[p]) else begin mid:=(l+r) div 2; ans:=0; if x<=mid then inc(ans,query(p*2,l,mid,x,y)); if y>mid then inc(ans,query(p*2+1,mid+1,r,x,y)); exit(ans); end; end; begin readln(n); for i:=1 to n do readln(a[i]); build(1,1,n); readln(m); for i:=1 to m do begin readln(c,x,y); if c=1 then add(1,1,n,x,y) else writeln(query(1,1,n,x,y)); end; end.
区间增加,区间求和
原文:http://www.cnblogs.com/qtyytq/p/4913895.html