# 序列中位数
注意给的数组默认不是有序的!
模拟题,排序之后,取中位数,然后按照b数组 删 a数组中元素,再取中位数。
#include<bits/stdc++.h>
using namespace std;
// 计算并返回中位数
double findMedian(vector<int>& nums) {
int n = nums.size();
if (n % 2 == 1) {
return nums[n / 2]; // 奇数长度,返回中间的元素
} else {
// 偶数长度,返回中间两个元素的平均值
return (nums[n / 2] + nums[n / 2 - 1]) / 2.0;
}
}
int main(){
int t;
cin >> t;
while(t--){
int n;
cin>> n;
vector<int> a(n);
vector<int> b(n - 1);
for(int i = 0; i < n; i++){
cin >> a[i];
}
for(int i = 0; i < n - 1; i++){
cin >> b[i];
}
vector<int> nums = a;
vector<double> answers;
sort(nums.begin(), nums.end());
// 把中位数放进结果集
answers.push_back(findMedian(nums));
for(int i = 0; i < n - 1; i++){
int target = a[b[i]];
// 删除目标值
nums.erase(find(nums.begin(), nums.end(), target));
// 把中位数放进结果集
answers.push_back(findMedian(nums));
}
for(auto answer : answers){
// 判断是否是整数
if(answer == (int)answer) printf("%d ", (int)answer);
else printf("%.1f ", answer);
}
cout << endl;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
@2021-2025 代码随想录 版权所有 粤ICP备19156078号