1 条题解
-
0
排序
把连续排序过程看成维护一个大小为 的集合。开始时放入 ,每次取出其中最小值作为下一个 ,再加入一个新的 ;最后把剩余的 个数从小到大取出。因此 就是 中,尚未在 出现的最小值。若 不是前缀最大值,那么它的位置实际上已经唯一确定为 。把所有这样的 以及对应的 位置删掉后,问题规模变小,而 不变;剩余的 严格递增。把剩余元素按大小重新编号后,只需解决 的情形。
设缩小后的规模为 。值 必须在输出它之前进入集合,所以它在原排列中的位置需要满足 。这个条件也是充分的。
从小到大放置值 。此前 已占用 个合法位置,所以 的可选位置数为 。因此总方案数为。若第一位取最小的 ,删掉这一位和值 后,剩下的仍是同一个问题,方案数为 。所以只要 ,第一位一定取 。
设 是满足 的最小整数,那么前 位一定为 ,只需对最后 位做字典序反排名。由于 ,当 时有 ,因此 ;若 ,只有唯一方案。对于剩余的 个位置,设当前处理位置为 ,剩余值从小到大为 。若不限制下一位具体填谁,按值从小到大放置时, 最晚只能放到 ,而此前已有 个位置被占,另有 个更小剩余值会先占位置,所以它的可选位置数为。这些数相乘就是当前状态的方案数。于是枚举当前位置填哪个剩余值,计算该分支的后续方案数,就可以普通贪心反排名。
总时间复杂度为 ,实际可视为 ,空间复杂度为 。
信息
- ID
- 2334
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 4
- 已通过
- 1
- 上传者