矩阵快速幂 + 树状数组.
考虑两个数 $a_i,a_j$ 对答案的贡献,可以发现它们把所有位置分成了 $3$ 种, $i,j$ ,以及其他位置.
对于 $a_i,a_j$ 来说,它们出现在其他的每一个位置的概率都是相同的.
于是只用考虑以下这几种情况最终出现的概率,
- $a_i$ 在位置 $i$ , $a_j$ 在位置 $j$ .
- $a_i$ 在位置 $j$ , $a_j$ 在位置 $i$ .
- $a_i,a_j$ 恰有一个在原来位置,另外一个在除掉 $i,j$ 后的其他位置.
- $a_i,a_j$ 恰有一个在对方位置,另外一个在除掉 $i,j$ 后的其他位置.
- $a_i,a_j$ 都在除掉 $i,j$ 后的其他位置.
可以用矩阵快速幂处理出操作 $k$ 次后这几种情况各自的概率.
而 $a_i,a_j$ 对于答案的贡献是一些与 $i,j$ 有关的一次多项式.
从前往后考虑每个 $a_i$ ,树状数组维护以 $a_i$ 为下标的区间中的 $\sum1,\sum i$ 即可,时间复杂度 $O(n\log n)$ .
1 | //%std |