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

image
image

void update1(ll k,ll x) {
	int u=k;
	while(k<=n) {
		c1[k]+=x;
		c2[k]+=(u-1)*x;
		k+=lowbit(k);
	}
}

void update(ll l,ll r,ll x) {
	update1(l,x);
	update1(r+1,-x);
}

ll query1(ll k) {
	ll ans=0;
	while(k>0) {
		ans+=c1[k];
		k-=lowbit(k);
	}
	return ans;
} 

ll query2(ll k) {
	ll ans=0;
	while(k>0) {
		ans+=c2[k];
		k-=lowbit(k);
	}
	return ans;
}

ll query(ll l,ll r) {
	return r*query1(r)-query2(r)-(l-1)*query1(l-1)+query2(l-1);
}
posted @ 2023-01-21 12:29  dddddadaplllllane  阅读(43)  评论(0)    收藏  举报