AGC030D

vjudge

标签 期望线性性,DP

给定长度为 \(n\) 的序列 \(a\),以及 \(T\) 次操作,每次操作形如交换 \(a_{x_i}, a_{y_i}\)。每种操作都可以选择执行/不执行。

对于总共的 \(2^T\) 种操作方式,求出最终序列的逆序对对数之和。

\(n \le 3000\)

我们肯定不能暴力算,考虑有序数对 \((i, j)\) 对答案的贡献,即有多少种操作方式使得 \(a_i > a_j\)

\(f_{i, j}\) 表示当前有多少种操作方式使得 \(a_i > a_j\),对于一次操作,考虑 \(f\) 如何变化:

  • \(i,j \ne x \& i,j \ne y\),那么这次操作对 \(f_{i, j}\) 没有影响,\(f_{i, j} \times \! = 2\) 即可。
  • 否则不妨设 \(i = x\),那么 \(f_{x, j} = f_{x, j} + f_{y, j}\),表示操作与否。其他的几种同理。(\(f_{x, y}\) 可能需要特殊处理一下)

于是就有了一个 \(O(n^2q)\) 的做法。

考虑优化。其实这个转移有一个不错的性质,就是第二种只有 \(O(n)\) 种,如果只进行 \(2\) 类转移就很棒。

如何处理第一类操作的 \(\times 2\) 操作,可以对于两种转移都 \(/2\),那么第一种就相当于不变,第二种相当于 \(f_{x, j} = (f_{x, j} +f_{y, j}) / 2\),最后乘一个 \(2^T\) 即可。

换个角度,此时的 \(f\) 其实是 \(a_i > a_j\) 的期望,拆贡献也就是期望线性性的表现。所以如果从期望的角度思考这个问题就会简单很多。

时间复杂度:\(O(n^2 + nq)\)

这个题告诉我们:计数/期望是可以相互转化的

posted @ 2025-12-10 17:14  xiehanrui0817  阅读(7)  评论(0)    收藏  举报