解题报告-论对“排序”的新理解

解题报告-论对“排序”的新理解

这样排序的问题,一般都是多次排序,然后查询一个位置。这也就意味着,这样的题一般有多样的特殊性质。

如果我们多次暴力排序,那么复杂度可以近似 \(O(nm\log n)\),肯定是不行的。这个时候,我们就要拿出针对这种题的 \(\texttt{Trick}\)——\(01\) 序列。

这道题就是一个例子。这个 \(\texttt{Trick}\) 不常用,但是却针对这种题十分有用。

上面说的”特殊性质“是什么意思?分析题目,发现查询的只是一个数,而且不是在线查询。就是说,我们全程只要关心的,只是 \(X\) 这个数而已。

既然我们只要关心的是 \(X\) 这个数,那么只有在区间排序与 \(X\) 相关的区间时,\(X\) 的位置才会改变。

如何维护这个过程?我们只需要把大于等于 \(X\) 的数看作 \(1\),小于 \(X\) 的数看作 \(0\),每次排序,\(1\) 丢一边,\(0\) 丢一边,用线段树维护,就把 \(O(n\log n)\) 的排序优化到了 \(O(\log n)\)

至于 \(X\) 的位置,也很好求。\(X\) 一定是大于等于 \(X\) 的数中最小的那个,那么我们只需要找到 \(0\)\(1\) 的分界点就行,更新 \(posX\)

这个 \(\texttt{Trick}\) 已经被我淡忘,直到上一次某位巨神讲解某不知名模拟考试 \(\text{T}4\) 的时候才想起。今天看来,还是好巧妙。

posted @ 2024-12-06 21:15  KarmaticEnding  阅读(17)  评论(0)    收藏  举报