https://www.acmicpc.net/problem/2696
밥좀먹고해야쥐
#include <iostream>
#include <queue>
using namespace std;
int arr[10005];
priority_queue<int, vector<int>, greater<int> > leftq; // bigger than mid
priority_queue<int> rightq; // smaller than mid
int mid=0;
queue<int> ans;
int T,M;
void solve(int x){
if(x==M) {
cout<<ans.size()<<'\n';
int cnt=10;
while(!ans.empty()){
cout<<ans.front()<<" ";
ans.pop();
cnt--;
if(cnt==0) {
cnt=10;
cout<<'\n';
}
}
return ;
}
if(x==0) mid=arr[x];
else {
if (arr[x] > mid) leftq.push(arr[x]);
else rightq.push(arr[x]);
int queue_size = leftq.size()-rightq.size();
if(queue_size>=2){
while(leftq.size()>rightq.size()){
rightq.push(mid);
mid = leftq.top();
leftq.pop();
}
}
if(queue_size<=-2) {
while (leftq.size() < rightq.size()) {
leftq.push(mid);
mid = rightq.top();
rightq.pop();
}
}
}
if(x%2==0) ans.push(mid);
solve(x+1);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>T;
while(T--){
cin>>M;
for(int i=0; i<M; i++) cin>>arr[i];
leftq = priority_queue<int, vector<int>, greater<int> >();
rightq = priority_queue<int>();
ans = queue<int>() ;
mid=0;
solve(0);
cout<<'\n';
}
}