【转载】mx noip day2 sol
T1 捏捏
这个题才是签到题。
右边为逆序对总数。为左边的值找一个具体意义,我们将证明这个值不大于等号右边的值。
考虑冒泡排序,右边即冒泡排序交换的次数(每交换一次一定减少一个逆序对)。左边一定不大于冒泡排序交换次数,因为左边的值只考虑了复原需要向左移动的数,而未考虑向右移动的数。更具体的是左边就是冒泡排序交换次数的下界。
观察何时不能达到下界。如果一个数既往右边移动又往左边移动即无法到达下界。所以如果有类似于 3 2 1
这样的子序列一定不合法,也即如果存在长度为
也可以考虑动态地向后加入数,计算两边的增量,分类讨论:
:此时 为前 个数的最大值,因为 表示 之后有 个比 小的数,那前 个数一定都不大于 ; : ,那就说明后面没有比 更小的数,满足 全部出现。
那么加入的
可以得到一个
那么剩下的工作是处理不同的前缀。记
需要一些方法判断前缀是否合法,这个是容易的。
T2 太空沙
首先添加超源超汇并且令其不会被删除使图弱连通,不影响答案,并且入度/出度为 0 的点唯一了。
先对这个拓扑图跑一个拓扑序,点
对于一条边
那么问题变成了区间取
T3 亦爱门优
先考虑暴力判断一个子段是否合法。令星星的维数从
枚举
如果所有星星都能够被加入,那么这个子段合法。这样可以做到
然后考虑 DP。从第
对这个 DP 进行转移,不妨考虑从后往前走,分类讨论。
如果
否则我们要在
注意到我们一定会将点
那么枚举所有的
T4 锐
分出来的若干段中,一定只有一段贡献的是段内最长不降子序列长度,其他贡献的是零或一的数量。这样可以得到
暴力枚举所有划分方案其实很搞笑,可以直接做 DP。定义
每次扩展一段的 DP 做法其实也很搞笑,我们再加一维
接下来是正解。注意到段内最长不降子序列长度这个贡献可以看成一个只贡献 0 和一个只贡献 1 个数的两个子段的贡献,那问题被转化为如下形式:选出一个尽量长的子序列,使得其连续段数不超过
倒过来考虑,我们要做的其实是将在其中删去一些元素,让未被删去的元素来产生贡献。首先一定不会删除连续的两个,因为它一定不优。当我们将中间的一个元素删除时,它两侧的两个元素会合并为一个新的元素(因为
不妨让中间的元素价值为
当然证明了凸性也可以直接用闵可夫斯基和优化
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现