动态逆序对

发布时间 2023-07-29 09:57:55作者: wscqwq

[CQOI2011] 动态逆序对

考虑 CDQ 分治。

可以对于每个数记录一个时间戳,表示它被删除的时间(为了树状数组的维护方便,我们记时间戳越大者删除时间越早)。然后逆序对的下标是一维,数值是一维,转换成了一个三维偏序问题。我们对于每个数,考虑由它构成的逆序对,且它的时间戳为二者中较大者构成的逆序对数量。考虑对于 \(j\) 有两种可能,\(t_i<t_j,p_i<p_j,a_i>a_j\)\(t_i<t_j,p_i>p_j,a_i<a_j\),这两种情况可以做两遍三维偏序,然后在第二遍时可以进行归并排序。

时间复杂度 \(O(n\log^2n)\)

code