JOISC 2017 D
神题,模拟赛考到,不会,遂题解诞生。
读完题目,发现等价于给出若干
可以考虑一个调整法的思路,我们先假定全部分给
问题就变成给出一个集合,元素为区间,而我们现在需要从中找到一个最优秀的子集
我们称这个拆解的过程为“反转”。
我们设这个拆分后每个位置上的值是
性质零
设最优答案为
证明是显然的,
性质一
可以发现,若
证明:考虑此时我们不反转
这样的变化一定不劣。
由此可以得到:一定存在最优集合
形式化地,有:
下面我们称
现在我们来考虑在多项式复杂度内解决本问题。
设
那么有
设某个
考虑二分答案,设当前二分答案为
也就是
注意到我们在计算过程中只关心
考虑构造这样一个
最后再判断
复杂度
注意到复杂度主要开销是
性质二
我们断言,如果最优解不是
考虑如下当
以下操作只要
,直接删除 ,那么有 ,导致两者差距缩小 。- 否则考虑取到
的两个集合,也就是 所在的两个区间 ,将其删去,那么有 ,其余 不变,也可以将差距缩小 。
可以发现操作始终可以进行,因此最终必然可以操作到满足条件,或者
注意到我们可以钦定
由此,我们可以知道
复杂度降到
性质三
我们断言,如果最优解
注意到这个
这推出
性质四
更强于性质三的,我们给出,如果最优解不是
设一个
由于左边是偶数且非负,所以只能取到
综合各个性质,我们仅需 check
了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!