链接:https://ac.nowcoder.com/acm/contest/61132/L 来源:牛客网 某天cbyyx突发奇想给lyt出了一道题:给定序列a,b,保证|a|+|b|为奇数且小于1e6,给定q组询问,每次将a序列其中一个数修改或将b序列其中一个数修改,问每次操作后两序列合并后的中位数是多少,lyt觉得这个问题太简单并把它秒了,但lyt觉得这个题对新生来说有点困难,于是他简化问题如下:给定两个正整数n,m,再给定长度为n的正整数序列a, 保证n为奇数。接下来m行,每行两个正整数p, x。表示把a[p]修改为x。对于每次操作输出修改后的中位数。
时间: 2024-04-13 13:25:20 浏览: 171
这个问题可以通过维护一个有序的序列来解决。首先,我们可以将序列a排序,然后找到中位数的位置mid。对于每次操作,我们只需要更新a[p]的值,并将序列重新排序,然后输出新的中位数。
以下是一个示例的实现代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n, m;
cin >> n >> m;
vector<int> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
sort(a.begin(), a.end()); // 排序序列a
int mid = n / 2;
cout << a[mid] << endl; // 输出初始中位数
for (int i = 0; i < m; i++) {
int p, x;
cin >> p >> x;
a[p - 1] = x; // 更新a[p]的值
sort(a.begin(), a.end()); // 重新排序
cout << a[mid] << endl; // 输出新的中位数
}
return 0;
}
```
你可以将题目中给出的输入样例输入到这个程序中进行测试。希望对你有帮助!如果有任何疑问,请随时提问。
阅读全文