差分与前缀
定义一个序列$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}$
其余的:树状数组,树上差分
原文地址:https://www.cnblogs.com/soledadstar/p/11600711.html
时间: 2024-10-17 14:49:49