树状数组区间修改区间查询

设区间修改加入的差分数组为(d[i])

前缀和(sum^n_{i=1}sum^i_{j=1}d[j]=sum_{i=1}^nd[i]*(n-i+1)=(n+1)sum^n_{i=1}d[i]+sum^n_{i=1}d[i]*i)

只需要单独维护(d[i]*i)(d[i])即可

inline void add(int x,int v){
	for(int i=x;i<=n;i+=i&-i){
		t1[i]+=v;t2[i]+=x*v;
	}
}
inline int ask(int x){
	int ret=0;
	for(int i=x;i;i-=i&-i)
		ret+=(x+1)*t1[i]-t2[i];
	return ret;
}
原文地址:https://www.cnblogs.com/aurora2004/p/12520072.html