# 序列中位数 [题目链接](https://kamacoder.com/problempage.php?pid=1232) 注意给的数组默认不是有序的! 模拟题,排序之后,取中位数,然后按照b数组 删 a数组中元素,再取中位数。 ```CPP #include using namespace std; // 计算并返回中位数 double findMedian(vector& 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 a(n); vector 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 nums = a; vector 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; } } ```