順次整数の配列を読み取る、整数の数が読み取られたそれぞれの時間は、整数のシーケンスへの中央値の読み取りの出力奇数です。
入力フォーマット
整数入力PP、各入力データセットの行数が続くバックの代表的なデータセットの数の最初の行の。
各第1の入力データの最初の行は、データセットの整数の代表的なセット。
次に、整数MMを入力し、番号を含むデータの組を表し、MMは常に奇数、データは、スペースで区切られました。
残りのラインデータセットは、データセットから成り、各行は10のデータを含む、データ量が少ないスペースデータによって分離された最後の行10、よりてもよいです。
出力形式
データとの間のスペースとのデータの組の数と出力ビットの数を表す各データセット、最初のライン出力2つの整数(データの数の半分に添加すべきである)ため、分離しました。
データセットは、各列ごとの平均出力で構成され、残りの行は、データ量が少ないスペースデータによって分離された最後の行10、よりてもよい、10のデータを含みます。
出力には空白行があってはなりません。
データ範囲
1≤P≤10001≤P≤1000、
1≤M≤99991≤M≤9999
入力サンプル:
3
。1. 9
。1 2 6 7 8 5 4 3 9
2 9
。9 5 4 3 6 7 8 2 1
3 23は、
23 41である13であります22-324-31-11-- -7。8
。3 5103211-311-45 -67-73-81-99
-33 24 56であります
出力サンプル:
1. 5
。1 2 4 5 3
2 5
。9 8 7 6 5
3 12は
23 232222133553から3である
-7 -3
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
int main(){
int T;
scanf("%d", &T);
while(T --){
int n, m;
scanf("%d%d", &m, &n);
printf("%d %d\n", m, (n + 1) / 2);
priority_queue <int> down;
priority_queue <int, vector<int>, greater<int>> up;
int cnt = 0;
for (int i = 1; i <= n; i ++){
int x;
scanf("%d", &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){
printf("%d ", down.top());
if (++ cnt % 10 == 0) puts("");
}
}
if (cnt % 10) puts("");
}
return 0;
}