P1801:黑匣子题解

主要思路

我们可以考虑一个神仙结构:对顶堆。创建大根堆\(qmax\)和小根堆\(qmin\)。我们先用数组来储存这些数据。然后针对于某一次询问,我们要找整个序列前\(u(i)\)个数中第\(i\)小的的数字。每一次询问时,我们都把前\(u(i)\)个数放入大根堆中,如果大根堆中的元素数量等于\(i\)时,我们就把大根堆中最大的数(堆顶)放入小根堆中。最后,大根堆的元素个数为\(i-1\),然后我们要找的第\(i\)小的一定在小根堆的堆顶。

Continue reading →