Description
题目链接:BZOJ 4552
对一个长度为 $n$ 的排列 $a$ 进行 $m$ 次局部排序:
- 0 l r:将区间 $[l,r]$ 中的数字进行升序排序。
- 1 l r:将区间 $[l,r]$ 中的数字进行降序排列。
操作结束后,需要求出 $a_p$ 的值。
数据范围:$1\le n,m\le 10^5$
Solution
这题直接进行模拟排序一定超时,所以我们考虑如何在较快的时间内完成排序。
对最后 $a_q$ 的值 $x$ 进行二分,令 $v_i=[a_i>x]$。此时问题转化为了判定性问题:求最后 $a_q$ 的值和 $x$ 的大小关系。
对于一个 $01$ 序列,我们可以使用线段树在 $O(\log n)$ 的时间内进行模拟排序(区间查询和覆盖)。
时间复杂度:$O(m\log^2 n)$
Code
| 1 | 
 |