P2501 [HAOI2006] 数字序列
是思路非常值得学习的一道题
第一问:
首先我们感性上觉得这题应该和LIS有一点关系,但里面有一点问题:
17 50 50 50 18
如果我们求LIS的话,我们会认为只需要改掉50 50 50即可,但其实我们只改掉这些数,我们是无法做到让数单增的
我们发现这个限制写成数学语言即为:
第二问:
这个数据随机我们很难办(我当时以为会用到随机排列的LIS期望长度是
首先容易想到对于我们所求的最长不降子序列里的两个数
因此我们假设存在一个策略,其中黑线表示我们在操作完后序列的样子,红点表示操作前序列的样子,红色箭头表示变化值的大小(图来自题解)
我们发现对于一条黑线,如果在他上面的点比在他下面的点多,我们把他往上移到在他右边线处更优(如II移到III处更优);如果在他下面的点比在它上面的多同理;如果双方点相同,随便移动无影响。
因此我们在进行若干次操作后,得到的黑线一定是被分成了两部分:
因此我们考虑一个
因为数据随机,每个数被更新的前缀并不多,直接暴力转移即可
最终复杂度
u1s1,要是这题把随机性质去掉,数据范围开正常一点的话,是一个好题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?