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

对于一个数组b,用树状数组,我们可以单点修改区间查询它的前缀和数组c。
对于一个数组b,用树状数组,我们可以通过维护它的差分数组a来区间修改单点查询。
现在有b的前缀和数组c。
我们如果要区间修改区间查询。
那么就探寻a和c的关系就行了。
发现每个a[i]会对每个i<=j的b[j]转移一次,
每个b[i]会对每个i<=j的c[j]转移一次。
然后会发现a[i]通过b[k] (i<=k<=j)转移到c[j]。
一共有j-i+1个b[k]
所以
c[j] =sigma(a[i] * (j - i + 1))
c[j] = sigma(a[i]) * (j+1) - sigma(a[i]*i)
然后就维护sigma(a[i])和sigma(a[i]*i)就行了

你可能感兴趣的:(数据结构)