题目:
分析:我只想到了在原有排序算法上进行优化修改来实现这个题。
大佬stl:
#include<bits/stdc++.h>
using namespace std;
int m;
int main()
{
cin>>m;
vector<int> v;
for(int i=0;i<m;i++)
{
int c; cin>>c;
v.insert(lower_bound(v.begin(),v.end(),c),c);
if(v.size()%2==1) cout<<v[v.size()/2]<<endl;
}
}
当然upper也可以的。
但是这个题主要想让使用堆实现,采用优先队列试试吧!
AC:
#include<bits/stdc++.h>
using namespace std;
int m;
int main()
{
priority_queue<int,vector<int>,less<int> > q1;
priority_queue<int,vector<int>,greater<int> > q2;
cin>>m;
int a,b;
cin>>a>>b;
cout<<a<<endl;
q1.push(min(b,a));
q2.push(max(b,a));
for(int i=2;i<m;i++)
{
cin>>a;
if(a>=q2.top())
{
q2.push(a);
int q2size=q2.size();
int q1size=q1.size();
if(q2size==q1size+2)
{
q1.push(q2.top());
q2.pop();
}
}
else{
q1.push(a);
int q2size=q2.size();
int q1size=q1.size();
if(q1size==q2size+2)
{
q2.push(q1.top());
q1.pop();
}
}
int q2size=q2.size();
int q1size=q1.size();
if(q1size!=q2size)
{
if(q1size==q2size+1) cout<<q1.top()<<endl;
else cout<<q2.top()<<endl;
}
}
}