CF 1437 E. Make It Increasing 改动nlogn LIS + 序列性质分析

在做这一题之前先看一道题:

给的一个长度为n的序列a,求最少需要改变a的数量,使得a序列非严格递增。

显然结果为:n-LIS,(因为最后一定有些数是不变的,我们让不变的数尽量长,则必须让不变的数满足最终序列的性质即:非递减)

如果把非严格改成严格递增呢?

我们依然用上面的思路:让不变的序列尽量长,即满足最终序列,最终序列是严格递增序列,由于是整数,则对于:j>i,必须满足a[j]>a[i].且a[j]-a[i]>=j-i. 这样才能保证中间变化的数有解。

为了方便我们对上面的式子变化一下:a[j]-j>=a[i]-i. 为了方便: 我们刚开始让a[i]-=i,最终得到的序列就只需要满足j>i,a[j]>a[i],即可,即:满足a序列非严格递增即可。这就回到了第一个问题,直接求即可。

知道上面的经典例题后,我们来看这道题就非常简单了:

首先比较显然的思路:

对于每段b[i-1],b[i],我们把它看成一个区间,求一次结果。最后累加即可。若有一个区间a[R]-a[L]>R-L,则说明无法构造成功,输出-1即可。为了方便可在首尾加上两个哨兵节点。

另外:对于每段区间L,R。我们求得是R-L-1-LIS。

其中LIS是必须要包括a[L],和a[R]的。所以在nlogn求LIS的过程中我们需要改动一下:

首先我们要对nlogn求LIS的过程比较熟练:

dp[i]表示长度为i的非严格递增子序列结尾最小值为

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值