#pAIXUlydlt00x0504. 动态中位数 Running Median

动态中位数 Running Median

动态中位数问题

题目描述

依次读入一个整数序列,每当已经读入的整数个数为奇数时,输出已读入的整数构成的序列的中位数。

输入格式

第一行输入一个整数 PP,代表后面数据集的个数,接下来若干行输入各个数据集。

每个数据集的第一行首先输入一个代表数据集的编号的整数。

然后输入一个整数 MM,代表数据集中包含数据的个数,MM 一定为奇数,数据之间用空格隔开。

数据集的剩余行由数据集的数据构成,每行包含 1010 个数据,最后一行数据量可能少于 1010 个,数据之间用空格隔开。

输出格式

对于每个数据集,第一行输出两个整数,分别代表数据集的编号以及输出中位数的个数(应为数据个数加一的二分之一),数据之间用空格隔开。

数据集的剩余行由输出的中位数构成,每行包含 1010 个数据,最后一行数据量可能少于 1010 个,数据之间用空格隔开。

输出中不应该存在空行。

输入输出样例 #1

输入 #1

3 
1 9 
1 2 3 4 5 6 7 8 9 
2 9 
9 8 7 6 5 4 3 2 1 
3 23 
23 41 13 22 -3 24 -31 -11 -8 -7 
3 5 103 211 -311 -45 -67 -73 -81 -99 
-33 24 56

输出 #1

1 5
1 2 3 4 5
2 5
9 8 7 6 5
3 12
23 23 22 22 13 3 5 5 3 -3 
-7 -3

限制条件

  • 1P10001 \le P \le 1000
  • 1M999991 \le M \le 99999,且 MM 为奇数
  • 所有 MM 相加之和不超过 5×1055 \times 10^5

样例解释 #1

数据集 1

输入序列:[1,2,3,4,5,6,7,8,9][1, 2, 3, 4, 5, 6, 7, 8, 9]

读取过程中,当读取到第 1, 3, 5, 7, 9 个元素时,输出当前中位数:

  1. 读取 1 个元素:[1] → 中位数:1
  2. 读取 3 个元素:[1, 2, 3] → 中位数:2
  3. 读取 5 个元素:[1, 2, 3, 4, 5] → 中位数:3
  4. 读取 7 个元素:[1, 2, 3, 4, 5, 6, 7] → 中位数:4
  5. 读取 9 个元素:[1, 2, 3, 4, 5, 6, 7, 8, 9] → 中位数:5

输出中位数序列:[1,2,3,4,5][1, 2, 3, 4, 5]

数据集 2

输入序列:[9,8,7,6,5,4,3,2,1][9, 8, 7, 6, 5, 4, 3, 2, 1]

读取过程中的中位数:

  1. 读取 1 个元素:[9] → 中位数:9
  2. 读取 3 个元素:[9, 8, 7] → 中位数:8
  3. 读取 5 个元素:[9, 8, 7, 6, 5] → 中位数:7
  4. 读取 7 个元素:[9, 8, 7, 6, 5, 4, 3] → 中位数:6
  5. 读取 9 个元素:[9, 8, 7, 6, 5, 4, 3, 2, 1] → 中位数:5

输出中位数序列:[9,8,7,6,5][9, 8, 7, 6, 5]

数据集 3

输入序列:$[23, 41, 13, 22, -3, 24, -31, -11, -8, -7, 3, 5, 103, 211, -311, -45, -67, -73, -81, -99, -33, 24, 56]$

读取过程中,每当读取奇数个元素时输出当前中位数,共输出 12 个中位数。