目录
题目链接
思路
堆
开两个堆,一个大根堆一个小根堆,然后一个$mid$来记录中位数,如果插入的数比mid大,就插入到小根堆,反之插入到大根堆中
这样就保证了小根堆中的元素一定比大根堆中的大(这不是废话吗)
所以,小根堆的堆顶是第一个大于$mid$的数,大根堆堆顶是第一个小于等于$mid$的数字。
但我们在输出答案前需要对$mid$进行调整,如果小根堆和大根堆内元素相同,就无需处理,此时$mid$仍然是当前的中位数。
如果两个堆中元素个数不同,那我们就需要进行调整。
具体是把元素个数较多的堆的堆顶作为$mid$,$mid$加入元素较少的堆。
#include#include #define N 100003using namespace std;priority_queue