154. 序列中位数
内存限制:256 MB
时间限制:1.000 S
题目描述
牛牛有一个长度为 n 的整数序列 a,以及一个长度为 n - 1 的整数序列 b,其中 b 中的元素各不相同。牛牛会首先计算序列 a 的中位数,然后按照序列 b 的顺序,依次删除原序列 a 中对应位置的元素,即删除 a[b[i]],其中 0 <= i < n - 1。每次删除后,牛牛会重新计算序列 a 中剩余元素的中位数。
- 若剩余元素数量为奇数,则中位数为排序后中间的那个数。
- 若剩余元素数量为偶数,则中位数为排序后中间两个数的平均值。
牛牛将每次计算得到的中位数记录下来,但担心出现错误。请你帮助他验证结果是否正确。
输入
第一行输入一个整数 t(1 <= t <= 10),表示数据组的数量。对于每组数据,输入三行:
- 第一行为一个整数 n(1 <= n <= 10000),表示序列的长度。
- 第二行为 n 个整数,表示序列 a 的元素(1 <= a[i] <= 10^9)。
- 第三行为 n - 1 个整数,表示序列 b 的元素(1 <= b[i] < n)。
输出
对于每组数据,输出一行,包含 n 个数,表示每次删除后的中位数结果。
- 如果中位数是浮点数,则保留一位小数。
- 如果中位数是整数,则直接输出整数。
样例输入 复制
2
3
1 5 9
1 2
4
2 6 8 12
2 3 1
样例输出 复制
5 5 1
7 6 4 2
提示
第一组数据
初始数据:
n = 3
a = [1, 5, 9]
b = [1, 2]
初始记录中位数 5
第一次删除:
按 b[0] = 1 删除原序列 a[1] (即删除 5),序列变为 [1, 9] 排序后的序列是 [1, 9]。
中位数为 (1 + 9) / 2 = 5
记录中位数:5
第二次删除:
按 b[1] = 2 删除原序列 a[2] (即删除 9),序列变为 [1] 排序后的序列是 [1]。
中位数是 1(因为只有一个元素)
记录中位数:1
输出结果为 5 5 1