差分数组
在网上讲差分数组的博文很少,也很难找到。一度以为差分数组是传播于小众的神犇技巧所以一直放着没有去研习。今天做了
bzoj1635后发现各路神犇都用差分数组,本蒟却傻傻写了线段树。。。。。
对于序列a{},取a[i]-a[i-1]为其差分数组b[i]的值,可以发现,a[i]=∑bj(1≤j≤i)
如 对于序列 a、b、c、d 其差分数组为 a、 b-a、 c-b、 d-c
(a-0)
有a=a,b=a+(b-a),c=a+(b-a)+(c-b),d=a+(b-a)+(c-b)+(d-c)
那么,如果我们进行区间加减操作,且修改的区间连续不相交,那么,若将(x,y)区间整体加val,我们就可以对差分数组的b[x]加val,b[y+1]减val。此时差分数组所对应的原序列即为(x,y)整体加val后的区间。
如此而已,推一推就明白了。