差分数组

假设有一个长度为6数组: a=[0,0,0,0,0,0] 现在想在L-R之间添加3,那么就需要每一个数迭代的添加,但是这样就太慢了。这个时候差分数组的作用就体现出来了:只需要记录两个端点的情况,然后最后统一处理就可以了。

例如L=1,R=3,循环增加得到的结果是a=[0,3,3,3,0,0]

我们可以记录一个差分数组d[1]=3, d[4]=-3。于是d=[0,3,0,0,-3,0],在最后得到结果的时候就是:

$a[i]=a[i-1]+d[i]$ 那么$a[0]=0,a[1]=a[0]+d[1]=3,a[2]=a[1]+d[2]=3…a[4]=a[3]+d[4]=3+(-3)=0$。

可以看到只需要在差分数组前面加上一个数,那么就会往后面一直推下去。d[1]数值改变,a[1]的数值就会相对于前面的增大,但是后面的$d[i], i \in [2,3]$这里差分并没有变,他就可以沿着后面传下去。

为什么d[4]=-3?

因为增加只在1-3,表明前面1-3都增加了3,那么d[4]想要保持不变,那么d[4]相对于d[3]就是-3。也就是说从这里开始就断了,不会往下面传递。

总结一下就是起点“传递”,终点”断流“。