利用大根堆和小根堆的性质,来维护最大的一部分数,和最小的一部分数,最后根据题目所需要求的东西,最后把小根堆的堆顶元素输出即可,
直播获奖这题同样可以用对顶堆来求解
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
priority_queue<int> l;
priority_queue<int,vector<int>,greater<int>> r;
for(int i = 1; i <= n; i ++){
int x;
cin >> x;
if(r.empty() || x&&x > r.top()) r.push(x);
else l.push(x);
while(r.size()>l.size()+1) l.push(r.top()),r.pop();
while(r.size()<l.size()+1) r.push(l.top()),l.pop();
if(i%2) {
cout << r.top() << "\n";
}
}
return 0;
}