思路:用两个优先队列,一个维护大的一半,一个维护小的一半。然后就可以了。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
int main(){
int t; scanf("%d", &t);
while(t--){
priority_queue<int> q1;
priority_queue<int, vector<int>, greater<int> > q2;
int id, n, x; scanf("%d%d", &id, &n);
printf("%d %d\n", id, (n+1)/2);
scanf("%d", &x); printf("%d ", x); q1.push(x);
for(int i=2; i<=n; i++){
scanf("%d", &x);
if(x<q1.top()) q1.push(x);
else q2.push(x);
if(q1.size()>q2.size()+1){
q2.push(q1.top());
q1.pop();
}
if(q2.size()>q1.size()+1){
q1.push(q2.top());
q2.pop();
}
if(i%2==1){
if(q1.size()>q2.size()){
printf("%d ", q1.top());
}
else{
printf("%d ", q2.top());
}
}
if(i%20==0) printf("\n");
}
printf("\n");
}
return 0;
}
京公网安备 11010502036488号