差分算法是一种基础算法
介绍:差分算法的特点在于支持区间修改(O(1)的时间复杂度),能够通过求前缀和获得修改后的原数组,O(n),
所以差分算法一般都是需要多次修改后,再进行一次前缀和求和的情况下
先看看一维差分
一维差分
一维差分分给一阶序列差分和二阶差分
一般使用差分数组来优化的话都是求一阶差分,二阶差分主要是用来替代树状数组和线段树
一阶差分
一阶差分一般应用于:需要多次区间修改,少量单点查询的情况下,这时候一般可以用差分来优化。可以总结为
1.差分应用题
差分应用题里面:差分更像是一种工具,可以用来 求每个点被遍历了几次 , 差分修改 , 知道某点和差分数组,求各个点的值等等
求每个点被遍历了几次 海底高铁
差分修改 P2367 语文成绩
二分答案+差分修改 P1083 [NOIP2012 提高组] 借教室
2.差分+贪心
差分+贪心主要应用于经典题型 增减序列 ,通过差分数组,求使得他们变成一样的最小操作数。
差分贪心经典 增减序列
P1969 [NOIP2013 提高组] 积木大赛(差分+贪心)
二阶差分
一阶差分有时候还解决不了问题,可能就要使用二阶差分了
一阶差分的区间修改,相当于[L,R]加上一个常数项
二阶差分的区间修改,相当于[L,R]改变了直线的斜率
改变斜率 P5026 Lycanthropy(二阶差分)_qq12323qweeqwe的博客-CSDN博客
运用二阶差分插入一元一次方程(等差数列)
P4231 三步必杀(二阶差分)_qq12323qweeqwe的博客-CSDN博客