
void add(int x, ll k)
{
ll p = x;
for (; x <= n; x += lowbit(x))
{
c1[x] += k;
c2[x] += k * p;
}
}
ll query(int x)
{
ll ans = 0, p = x;
for (; x ; x -= lowbit(x))
ans += (p + 1) * c1[x] - c2[x];
return ans;
}
原文 link
为什么公式里是 i=1∑pd[i]×i 但代码里是 c2[x] += k * p; 而不是 c2[x] += k * x; ?