$\huge \color{orange}{成魔之路->}$ $\huge \color{purple}{算法提高课题解}$
思路:
1. 建立大根堆 down 和小根堆 up
2. 小根堆 up 里面的所有元素都必须大于大根堆 down 里面的所有元素
3. 元素个数:down.size() == up.size() || down.size() == up.size + 1
完整代码
#include<bits/stdc++.h>
using namespace std;
int main()
{
int T;
cin>>T;
while(T--)
{
int m,n;
cin>>m>>n;
cout<<m<<' '<<(n+1)/2<<endl;
priority_queue<int> down;
priority_queue<int,vector<int>,greater<int>> up;
int cnt=0;
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
if(down.empty()||x<=down.top()) down.push(x);
else up.push(x);
if(down.size()>up.size()+1) up.push(down.top()),down.pop();
if(up.size()>down.size()) down.push(up.top()),up.pop();
if(i%2)
{
cout<<down.top()<<' ';
if(++cnt%10==0) puts("");
}
}
if(cnt%10) puts("");
}
return 0;
}
不好意思 ,突然想到了 莫欺少年穷 莫欺中年穷 莫欺老年穷
没事没事^_^