赞
踩
差分与前缀和是一对互逆的操作,常常用于处理区间问题,差分法是解决区间加减问题,前缀和是解决区间求和问题的常用办法。
差分法的应用主要是用于处理区间问题。当某一个数组要在很多不确定的区间,加上相同的一个数。我们如果每个都进行加法操作的话,那么复杂度 O(nm) 是平方阶的,非常消耗时间。
如果我们采用差分法,将数组拆分,构造出一个新的拆分数组,通过对数组区间的端点进行加减操作,最后将数组和并就能完成原来的操作。
差分法的特点:
差分算法解题的基本思路:b[i]=a[i]-a[i-1],a[0]=0
首先假设有一个数组: a[]={1 2 3 4 5 7 2} ; 差分后: b[]={1 1 1 1 1 2 -5}
一般应用场景: 让你对区间 [l,r] 加减操作 N 次
如:从第二个元素到第五个元素每个+3 ;从第二个元素到第四个元素每个-2 ;从第一个元素到第三个元素每个+1 ;....
先演示前三个:
对于每个 [l,r] 区间的加减操作都转化为对端点 l,r+1 的操作
从第二个元素到第五个元素每个+3: 转化为:
[l]+3 并且 [r+1]-3 ,即第2个+3;第5+1个元素-3
b[]是由a[]根据公式 d[i]=a[i]-a[i-1] ,a[0]= 0 .构造的新数列(差分数列) b[]:1 1 1 1 1 2 -5 现: 1 4 1 1 1 -1 -5 (操作1)(复原操作)
然后按照 d和a数列的关系,a[i]=a[i-1]+d[i],a[i]=d[1]+d[2]+....+d[i]可以得出改变后的a:1 5 6 7 8 7 2
跟原序列对比:
1 2 3 4 5 7 2 1 5 6 7 8 7 2确实是都加上了 3。
继续操作: 从第二个元素到第四个元素每个-2 转化为:
[l]+(-2) 并且 [r+1]-(-2) ,即第2个-2;第4+1个元素+2
操作1: 1 4 1 1 1 -1 -5 现 : 1 2 1 1 3 -1 -5然后根据上次
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。