1 条题解
-
0
自动搬运
来自洛谷,原作者为

紊莫
???搬运于
2025-08-24 23:08:13,当前版本为作者最后更新于2025-04-22 07:30:12,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
结论:建立析合树,若存在析点,答案为 ,否则答案为 。
首先将题意稍微转化一下,先确定每一层的划分,然后每次的
rand_int(0,1)就不用管了,显然能生成 的方案唯一。然后将点重新标号一下,从 上划分出 变成 中划分出 ,显然答案不变。
对于 已经排好序的情况,每一次的划分都没有限制,设 表示长度为 的序列的划分方案,枚举第一次划分有:
这就是经典的卡特兰数,所以 。
然后考虑暴力的算法,如果直接仿照上面的 DP,时间复杂度会达到 。
转而考虑原序列的本原连续段,一个连续段的定义是 表示在 内值域是一个连续的区间,而本原连续段就是不存在与之相交却无包含关系的连续段的连续段。
取出所有这样的连续段,将其建成一棵树,这个树即析合树。
现在,我们首先说明存在析点(儿子序列的任意子区间都不是连续段)就无解。
对于这一次划分,首先不能从一个儿子的区间中分开,否则就和本原连续段的定义矛盾。因为析点的性质,导致其不存在任意一个合法的划分,答案即为 。
然后对于一个合点(儿子是正序或者逆序),同样的不能从一个儿子的区间中分开,把这些段看成一个点,那么就是首先任意建立这些点的二叉树,最后再从每个点递归下去。
于是答案是卡特兰数之积的形式也比较显然了。
- 1
信息
- ID
- 11270
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者