原题链接:https://ac.nowcoder.com/acm/contest/999/B
这是一道很考验思路的题,明白之后很简单,但这种解题思路挺难想的
解题思路:
①这题妙在利用差分修改区间值,以达到数列所有数都相同的目的
②差分的性质:对于一个给定的数列A,它的差分数列B定义为, B[1]=A[1], B[i]=Ai−A[i − 1] (2<=i<=n), B[1]=A[1], B[i]=Ai−A[i − 1] (2<=i<=n)
这里只说性质,也就是把序列A的区间[L,R]加d,也就是把A[l],A[i+1]…A[r]都加上d,其实就是它的差分序列B中,B[l]+d,B[r+1]−d,,其他的位置统统不改变。
③题的目的是将A序列-通过+1/-1的操作转化为一样的数利用差分的性质,题可以转化为,把B[2]…B[n]转化为0的操作需要多少步,题目对A进行操作,相当于从B[2]…B[n]中选出两个元素,一个+1, 另一个-1。
④选出两个元素有三种方法,(在B[2]…B[n]中选出一正一负,分别进行减一加一,这种方法能更快的接近目标)(选择B[1]/B[n]和B[i]( 2 <= i <= n),这种操作因为B[1]/B[n]的值对数组A没有影响,所以这种操作相当于只修改了B[i[且达到了目的)(修改B[1
牛客 IncDec Sequence 题解 (差分 + 思路)
最新推荐文章于 2025-01-16 11:23:13 发布