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


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);
}

浙公网安备 33010602011771号