题目:
思路:
把小的数放在大根堆里,大的数放在小根堆里
属于一旦想到了就会豁然开朗的题目
如果找的是第k个大的只需要一个小根堆即可
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int maxn=111111;
int n,a[maxn];
priority_queue<int> q1;
priority_queue<int,vector<int>,greater<int>> q2;
int main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
cout<<a[1]<<endl;
q1.push(a[1]);
for(int i=2;i<=n;i++)
{
if(a[i]>q1.top()) q2.push(a[i]);
else q1.push(a[i]);
while(abs((int)q1.size()-(int)q2.size())>1)
{
if(q1.size()>q2.size())
{
int x=q1.top();
q1.pop();
q2.push(x);
}
else
{
int x=q2.top();
q2.pop();
q1.push(x);
}
}
if(i%2==1&&abs((int)q1.size()-(int)q2.size())==1)
{
if(q1.size()>q2.size()) cout<<q1.top()<<endl;
else cout<<q2.top()<<endl;
}
}
return 0;
}