差分数组


差分数组
差分数组就是原数组对应项和它前面那项的差值 。
来看一个例子:
原数组 a:5,8,4,3,15
差分数组 b:5,3,4,1,12
还是先来看例子:
原数组:a:5,8,4,3,15
它的前缀和数组:c:5,13,17,20,35
它的差分数组:b:5,3,4,1,12
它的差分前缀和(就是差分数组的前缀和):d:5,8,4,3,15
差分前缀和就是原数组。
我们看一道题:
对一个区间,我们每一次操作将[l,r]这段区间上的所有数加上delta。
最后查询某一个区间的和。
差分的性质,我们发现,因为我们差分数组只维护了相邻两个元素的差值,但是因为是区间修改,所以这段区间内部相邻元素的差值其实是没有被改变的。也就是说,差分数组中发生改变的元素仅是第一个元素和最后一个元素+delta(这里好好理解一下)
也就是说,我们只需要把差分数组b中的b[l]+delta,b[r+1]-delta,就可以做到在O(1)的时间进行区间修改
练习题
P2367 语文成绩
P4552 [Poetize6] IncDec Sequence

相关