图片说明
思路:用两个优先队列,一个维护大的一半,一个维护小的一半。然后就可以了。

#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;
}