왼쪽에 최대힙, 중앙값, 오른쪽에 최소힙으로 구성한다.
숫자를 입력받고, 현재 middle 값과 비교해서 왼쪽에 넣을지 오른쪽에 넣을지 비교.
홀수개 입력받을 때마다 middle 값을 적절히 조절해준다.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int T; cin >> T;
while(T--) {
priority_queue<int> left;
priority_queue<int, vector<int>, greater<int>> right;
vector<int> answer;
int N; cin >> N;
int middle; cin >> middle;
answer.push_back(middle);
for (int i=1; i<N; i++) {
int num; cin >> num;
if (num < middle) left.push(num);
else right.push(num);
if (i%2 == 0) {
if (left.size() < right.size()) {
left.push(middle);
} else {
right.push(middle);
}
if (left.size() < right.size()) {
middle = right.top();
right.pop();
} else {
middle = left.top();
left.pop();
}
answer.push_back(middle);
}
}
cout << answer.size();
for (int i=0; i<answer.size(); i++) {
if (i%10 == 0) cout << '\n';
cout << answer[i] << ' ';
}
cout << '\n';
}
return 0;
}