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 |
|