[ARC154E] Reverse and Inversion
2023-09-09
题目
[ARC154E] Reverse and Inversion
难度&重要性(1~10):9.5
题目来源
luogu
题目算法
数学
解题思路
Update :2023.8.28修改一处笔误
这是一道很妙的计数题,考试的时候没想到。
这道题我们首先会想到去化简一下式子 \(\sum\limits_{i<j,p_i>p_j}(j-i)\),这很明显是要求逆序对,但是这个 \((j-i)\) 就对我们来说有点棘手,所以很容易想到去将 \(i,j\) 拆开分别计算贡献:\(\sum\limits_{i<j,p_i>p_j}j-\sum\limits_{i<j,p_i>p_j}i\)。
拆开之后我们就需要有一个主次关系,即以 \(i\) 或者 \(j\) 的视角来继续化简式子,这里我们以 \(i\) 的视角入手,我们需要找到 \(i\) 前面比 \(p_i\) 大的,以及后面比 \(p_i\) 小的差:
好了,现在我们已经将 \(j-i\) 的贡献拆开计算了,但是由于 \([p_i<p_j]\) 和 \([p_i>p_j]\) 的符号方向不同,我们也只能分开计算,如何才能将符号统一呢。很简单,只需要将 \(\sum\limits_{j=1}^i[p_i<p_j]\) 旋转一下。
由于题目说了 \(p\) 是一个 \(1\sim n\) 的排列,那么比 \(p_i\) 小于等于的数有多少个能,当然是 \(p_i\) 个啦。这样我们就得到:
这里 \(i^2\) 是好处理的,但是 \(p_i\times i\) 不好处理,因为 \(p_i\) 的位置是不断在变化的。我们为了更好的处理就定义 \(w_i\) 表示 \(p_i\) 的最终所在位置,即 \(\sum\limits_{i=1}^ni^2-p_i\times w_i\)。
但由于 \(m\le 2\times 10^5\),是没法暴力处理。因此需要用一个操作:将求和改为求期望位置。这个操作的意义感觉是由下文结果体现的。
我们考虑翻转操作的本质是什么。假设对于 \(i\) 位置的值,若要将其翻转到 \(j\)。考虑有多少种操作可行
显然,翻转的中心就是 \(\dfrac{i+j}{2}\)。
- 当 \(i<j\) 时,方案数为 \(\min(i,n-j+1)\)。
- 当 \(i>j\) 时,方案数为 \(\min(j,n-i+1)\)。
由于分类讨论显然很烦,所以我们就要尝试将它们合并。可以发现,当 \(i<j\) 时,\(n-i+1>n-j+1\),而 \(i>j\) 同理,所以两种情况是可以合并在一起为 \(\min(i,n-i+1,j,n-j+1)\) 的。然后,我们就会发现把 \(i\) 翻转到 \(j\) 的概率与翻转到 \(n-j+1\) 的概率是相等的,那么它的总贡献就是 \(n-j+1+j=n+1\) 平均期望位置就是 \(\dfrac{n+1}{2}\),这样我们就将 \(i,j\) 的贡献给成功剔除了,而如果 \(i\) 没有进行翻转,则期望位置就是 \(i\),不妨设 \(k=\dfrac{C_{i}^2+C_{n-i+1}^2}{C_{n+1}^2}\),即一次操作不包括位置 \(x\) 的概率。
这样 \(w_i\) 的期望值我们就可以算出来了:
这样这道题我们就做出来了,时间复杂度为 \(O(n\log m)\),可以通过,它唯一的复杂度瓶颈就在于快速幂。
感谢 @Populus_euphratica 和 @MoriyaSuwako 指出错误
完成状态
已完成