2 条题解
-
0
using namespace std; struct Bitree{ long long bi[1000010],ibi[1000010]; long long n; long long lowbit(long long x){ return (x & -x); } void init(long long size){ n = size; for(long long i = 0; i <= n; i++){ bi[i] = 0; ibi[i]=0; } } void add(long long pos,long long val){ long long vb=val; long long vib=val*pos; while(pos <= n){ bi[pos] += vb; ibi[pos] += vib; pos += lowbit(pos); } } long long queryb(long long pos){ long long ans = 0; while(pos > 0){ ans += bi[pos]; pos -= lowbit(pos); } return ans; } long long queryib(long long pos){ long long ans = 0; while(pos > 0){ ans += ibi[pos]; pos -= lowbit(pos); } return ans; } long long query(long long pos){ return queryb(pos) *(pos+1) -queryib(pos); } long long query(long long l,long long r){ return query(r)-query(l-1); } }; Bitree bitree; long long a[1000005]; int main(){ long long n,m; cin>>n>>m; bitree.init(n); for(long long i=1;i<=n;i++){ cin>>a[i]; bitree.add(i,a[i]-a[i-1]); } for(long long i=1;i<=m;i++){ long long op; cin>>op; if(op==1){ long long l,r,v; cin>>l>>r>>v; bitree.add(l,v); bitree.add(r+1,-v); } if(op==2){ long long l,r; cin>>l>>r; cout<<bitree.query(l,r)<<'\n'; } } return 0; } ``` `
信息
- ID
- 2426
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 15
- 已通过
- 11
- 上传者