CF2084 E Blossom

题目大意:

有一个正整数 \(n\),给定一个数组 \(a\),其中的数要么是 \(-1\) 要么在 \(0 \sim n - 1\) 之间。
保证不为 \(-1\) 的值都不相同。
设一个排列 \(p\) 的权值为:

\[\sum_{l = 1}^{n} \sum_{r = l}^{n} MEX(p_{l} \sim p_{r}) \]

其中 \(MEX\) 表示最小不出现在这个集合中的整数。
你要将 \(a\) 的每个 \(-1\) 都变为 \(0 \sim n - 1\) 的数,最后要满足是 \(0 \sim n - 1\) 的排列。
求出所有可能的排列的权值之和。
\(n \le 5 \times 10^3\)

解题思路:

考虑没有 \(-1\) 怎么做。
可以从小到大枚举 \(MEX\),设至少包含 \([0 \sim MEX - 1]\) 的区间是什么。
这是可以一边枚举一边更新的。
分讨一下 \(MEX\) 出现的位置与至少包含 \([0 \sim MEX - 1]\) 的区间 的关系(因为 MEX 也要保证他不在区间内)
时间复杂度可以做到 \(O(n)\)
式子:

\[\sum_{mex = 1}^{n} mex \sum_{l = 1}^{n} \sum_{r = l}^{n} [MEX(a_{l} \sim a_{r}) = mex] \]

但有 \(-1\) 呢?
式子要多枚举一个 \(cnt\) 表示这个区间的 \(-1\) 个数,因为只有这玩意会影响我们求答案。
\(c_{i}\) 表示全局数值在 \(0 \sim i - 1\)\(-1\) 的个数是多少,这个是你 \(cnt\) 的下限。
\(tot\) 表示全局中的 \(-1\) 的个数,这是你 \(cnt\) 的上限。
\(sum_{i,j}\) 表示 \(i \sim j\)\(-1\) 的个数。

式子:

\[\sum_{mex = 1}^{n} mex \sum_{cnt = c_{mex}}^{tot} \binom{cnt}{c_{i}} \times (c_{i})! \times (tot - c_{i})! \times \sum_{l = 1}^{n} \sum_{r = l}^{n} [MEX(a_{l} \sim a_{r}) = mex \wedge (sum_{l, r} == cnt)] \]

太复杂了,由于 \(-1\) 的关系,我们无法像无 \(-1\) 那样直接求出数值 \(0 \sim i - 1\) 的区间。
主要复杂的部分实际是在 \(MEX = mex\) 那个判定条件,它要保证 \(MEX\) 未在此处出现过。
所以套路的,我们将 \(MEX = mex\) 转化为 \(MEX \ge mex\),这样前面 \(\times mex\) 也就没有了。

式子:

\[\sum_{mex = 1}^{n} \sum_{cnt = c_{mex}}^{tot} \binom{cnt}{c_{i}} \times (c_{i})! \times (tot - c_{i})! \times \sum_{l = 1}^{n} \sum_{r = l}^{n} [MEX(a_{l} \sim a_{r}) \ge mex \wedge (sum_{l, r} == cnt)] \]

这样的就好做了,因为你可以将 \(O(n^2)\) 对区间中第一个在 \(a\) 中出现且没在这个子区间出现的数。
这样通过双指针就可以做到 \(O(n^2)\)
再做一边后缀和就行。
\(O(n^2)\)

总结:

这题挺灵活的?

  1. 有 -1 的时候先把 -1 替换成数字,就是简化成没有 -1 的情况。
  2. MEX 的要求中不能有 MEX,所以这很难办,可以拆贡献,将 \(\sum MEX\) 拆为 \(\sum_{mex} (MEX \ge mex)\)
  3. 枚举的时候不要认为必须哪个要枚举,方向可以从弱化版入手。
posted @ 2025-04-28 00:29  positive_deviation  阅读(26)  评论(0)    收藏  举报