专栏文章
Solution ARC187C 1 Loop Bubble Sort
AT_arc187_c题解参与者 2已保存评论 1
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mir2qkmq
- 此快照首次捕获于
- 2025/12/04 14:47 3 个月前
- 此快照最后确认于
- 2025/12/04 14:47 3 个月前
Solution ARC187C 1 Loop Bubble Sort
鲜花:这题赛后花两天时间才调出来。
题意
对于一个长度为 的排列 ,定义一次操作为依次对于 ,若 则 swap 它们(即对于序列 执行单次冒泡排序的操作)。
现在给你一个序列 ,其中钦定了一些位置。你要求出有多少个排列 使得对 进行单次操作后满足 和 在钦定的这些位置相等。
先分析题目所说的单次冒泡排序的操作。我们发现假设处理到 ,其会跟随 swap 操作一直往后移到第一个大于 的位置前。即将 划分成若干个段,每个段的最大值均为这个段的第一个数,且每一段的第一个数依次递增。然后对于每个段循环向左移位。如下图:

考虑知道了 如何倒着推出 ,此时变成了选出一些段,每个段的最大值必须在其末尾,且若从左往右对段编号,编号小的段的最大值小于编号大的段。每种划分 的方案数都对应着一种合法的 ,我们只需对前者计数即可。
此时我们发现就变成了较为经典的 dp 形式,记 表示钦定 是当前段的最后一个元素,且值为 的方案数。那么它可以从 转移过来,表示选了 这个段。
考虑朴素的 dp 方式,记 表示值域在 内被钦定的数的个数, 表示下标在 内未被钦定的个数。
式子略繁杂但是不难推,建议自己先去推一下。这里直接给出:
后面的代表乘上的排列数, 意思是如果最后一个是 那么其值必须为 ,直接钦定了。
然后需要判掉 不合法的情况,细节较多。
考虑优化。首先发现 这维后面乘上的系数都一样,所以前缀和一下,记 表示当前的 ,此时时间复杂度变成了 。
然后发现优化后的式子调换 的枚举顺序,仍然可以前缀和。 涉及到的 的下标是一个区间,因为需要满足 这个区间的最大值不能超过 所以 不能过小。这个伴随 的增大是具有单调性的,所以可以双指针。
时间复杂度 ,code
相关推荐
评论
共 1 条评论,欢迎与作者交流。
正在加载评论...