【做题记录】CQOI2011 动态逆序对
-
\(\text{CQOI2011}\) 动态逆序对
- 算法:cdq 分治
题目:
对于序列 \(a\),它的逆序对数定义为集合
\[\{(i,j)| i<j \wedge a_i > a_j \}
\]
中的元素个数。
现在给出 \(1\sim n\) 的一个排列,按照某种顺序依次删除 \(m\) 个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数。
\(1\le n \le 10^5\),\(1\le m \le 50000\)
题解:
考虑反过来做,变成插入和询问逆序对。
这样只需要关心每次新增了多少逆序对。
那么一个数 \(now\) 产生逆序对当且仅当:
\(pos_i<pos_{now}\) 且 \(val_i>val_{now}\)
或者
\(pos_j>pos_{now}\) 且 $ val_j<val_{now}$
并且满足其删除时间在 \(now\) 后。
那么这就是个三维偏序(\(pos,val,time\))。

浙公网安备 33010602011771号