前言
上一次我讲了树状数组的单点修改,这次我打算讲一讲树状数组的区间修改。
区间修改单点查询
似乎毫无头绪。我们知道,树状数组的思想是前缀和,那我们是不是可以用一下前缀和的逆运算:差分呢?
首先我们设 b i = a i − a i − 1 b_i=a_i-a_{i-1} bi=ai−ai−1 ,那我们看一下:
查询
我们首先考虑查询。我们要求 a i a_i ai 那么我们就只用求 ∑ j = 1 i b j \sum_{j=1}^i b_j ∑j=1ibj 即可
为什么呢?让我展开给你看看:
b 1 + b 2 + . . . + b i b_1+b_2+...+b_i b1+b2+...+bi
= a 1 − a 0 + a 2 − a 1 + . . . + a i − a i − 1 =a_1-a_0+a_2-a_1+...+a_i-a_{i-1} =a1−a0+a2−a1+...+ai−ai−1
= a i − a 0