牛客 IncDec Sequence 题解 (差分 + 思路)

原题链接: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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值