差分、前缀

差分与前缀

定义一个序列$a$,它的差分序列为$b_n=a_n-a_{n-1}$(后向差分),前缀和序列为$b_n=b_{n-1}+a_n$,显然,差分与前缀和互为逆运算,这意味着,对差分序列求前缀和就是原序列;同理,对前缀和序列求差分也是原序列。

重要结论

1、如果有了前缀序列,我们就可以O(1)求出$[l,r]$的区间和等于$b_r-b_{l-1}$

2、如果有了差分序列,对$[l,r]$区间加$d$就意味着$b_l+d,b_{r+1}-d$

来看一道题:

对于数列$a$,$Q$次形如$[l,r]$中所有的数$+d$的操作,最后输出改动后的数列

如果你很巨,会树状数组或线段树,Orz

我们仿照2操作,O(1)的时间内对差分序列做修改,因为差分与前缀和互为逆运算,对最后的差分序列做前缀就OK啦。

不仅只能做加法,只要有逆运算的运算都可以差分与前缀和,比如前缀积(乘的逆运算是除)和异或(异或的逆运算是异或)差分。

二维差分与前缀

画个图推推就好了呀

前缀矩阵$b_{i,j}=b_{i-1,j}+b_{i,j-1}-b_{i-1,j-1}+a_{i,j}$。

对$(x_1,y_1)(x_2,y_2)$这个子矩阵$+d$即差分矩阵$b_{x_2,y_2}+d,b_{x_1-1,y_2}-d,b_{x_2,y_1-1}-d,b_{x_1-1,y_1-1}+d$

对$(x_1,y_1)(x_2,y_2)$这个子矩阵即前缀矩阵$b_{x_2,y_2}-b_{x_1-1,y_2}-b_{x_2,y_1-1}+b_{x_1-1,y_1-1}$

其余的:树状数组,树上差分

 

posted @ 2019-09-27 22:01  Soledad_S  阅读(336)  评论(0编辑  收藏  举报