基础算法-前缀和,差分

我也不知道为什么我不会的大多是基础算法…

定义

对于一维来说,前缀和与差分的处理较为简单。

前缀和,即是某一数列中,第i号元素及其之前的全部元素之和。对于某数列A,其前缀和S的信息

差分。即第i项与i-1项之差。给定一个数列A,它的差分数列B为

 由此可以看出,前缀和和差分是一对互逆运算。

差分序列B的前缀和序列就是原序列A

前缀和序列S的差分序列就是原序列A

上面的性质非常之重要,稍后会在二维中用到。

应用

前缀和可以快速的帮助我们求得某一个区间的和。

即对于原序列A中的一个区间(l,r),有前缀和序列S

差分可以快速的帮助我们进行区间同时加、减操作。

对于原序列A的区间(l,r)加d 其差分序列就变化为

Bl+d ,Br+1-d

其他位置均不需要改变。如果需要实装到原序列上,只需要将差分序列做一个前缀和即可。

二维

 这里引用一个例题来讲解会显得比较自然

激光炸弹 BZOJ1218

题来

我们以S[i,j]代表二维前缀和。那么我们接下来观察一下

S[i,j],S[i-1,j],S[i,j-1],S[i-1,j-1]

 

 这样我们就可以得到这样的递推式

猜你喜欢

转载自www.cnblogs.com/Uninstalllingyi/p/11413143.html
今日推荐