题目大意
给定一个长度为
n(1≤n≤500000)
的排列
a
。定义一次操作为交换不同位置的两个元素。求进行了
m
次操作后该排列逆序对的期望。
考场上的思路
m=0
我会做!
O(nlogn)
求逆序对!
思路
考虑每一对位置对答案的贡献(期望的线性性)。设
fi,j,k
表示进行了
i
次操作,
aj<ak
的概率。那么边界条件为:
f0,j,k=[aj<ak]
最终答案为:
∑j>kfm,j,k×1
状态转移方程为:
fi,j,k=∑j′≠jfi,j′,k+∑k′≠kfi−1,j,k′+fi−1,k,j+(n(n−1)2−(n−2)−(n−2)−1)fi−1,j,k
(这里省去了除以事件总数)
(n(n−1)2−(n−2)−(n−2)−1)
这个系数表示选到了
j
和
k
之外的情况数。这个状态转移方程的含义是看交换了那两个元素,对
(j,k)
有什么影响。
前面的两个和式可以计算出所有的后再减去自己,这样时间复杂度就是
O(n3)
。