树状数组区间加法&区间求和操作

树状数组区间加法&区间求和操作

一般的树状数组解决区间加&单点询问并不复杂

但是要解决区间求和。。。

我们假设原数组是\(\{a_i\}\),差分数组\(\{d_i=a_i-a_{i-1}\}\)
所以,我们有式子

\[a_x=\sum_{i=1}^xd_i \]

现在的问题是区间和,也就是求

\[\sum_{i=1}^xa_i \]

如果把每个都拆成上面的形式,那么我们就有

\[Ans=\sum_{i=1}^nd_i(x-i+1) \]

\[Ans=\sum_{i=1}^n(x+1)d_i-\sum_{i=1}^nid_i \]

因此,在维护树状数组的时候分别维护两个值
一个\(d_i\),一个\(id_i\)即可。

posted @ 2018-04-01 22:19  小蒟蒻yyb  阅读(1645)  评论(4编辑  收藏  举报