链接:https://ac.nowcoder.com/acm/contest/61132/L 来源:牛客网 给定两个正整数n,m,再给定长度为n的正整数序列a, 保证n为奇数。接下来m行,每行两个正整数p, x。表示把a[p]修改为x。对于每次操作输出修改后的中位数。写个c++的代码
时间: 2024-04-13 13:25:24 浏览: 176
以下是使用C++编写的解答:
```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];
}
for (int i = 0; i < m; i++) {
int p, x;
cin >> p >> x;
a[p] = x;
sort(a.begin(), a.end());
cout << a[n / 2] << endl;
}
return 0;
}
```
首先,我们读取输入的n和m,以及长度为n的正整数序列a。
然后,我们使用循环读取m行的操作。每次操作中,我们读取p和x,并将a[p]修改为x。接下来,我们对序列a进行排序,然后输出修改后的中位数a[n / 2]。
最后,我们返回0,表示程序顺利结束。
请注意,该代码假设输入是有效的,并且没有进行输入验证。如果需要对输入进行验证,请根据题目要求进行适当的修改。
相关问题
链接:https://ac.nowcoder.com/acm/contest/61132/J 来源:牛客网 河南农业大学信管学院举办一年一度的合唱比赛,目前你是评委之一,剩下还有其他的n位评委,给定一个正整数n和n个正整数表示这n个评委给目前在表演的团队的分数,评分规则为在所有评委(包括你)的分数中去掉一个最高分和最低分,剩下的取平均值(总共n-1个值),现在你可以参与评分(1~100之间的整数),问最终结果会在什么区间内,用两个数表示这个区间,结果保留6位小数。
根据题目描述,我们需要计算在去掉一个最高分和一个最低分后,剩下的分数的平均值的区间范围。假设除了你之外的评委给出的分数中最高分为max_score,最低分为min_score,你给出的分数为your_score,剩下的评委人数为n-1。
根据题意,剩下的分数平均值的最大值为(max_score + your_score) / n-1,最小值为(min_score + your_score) / n-1。
所以最终结果会在区间[(min_score + your_score) / n-1, (max_score + your_score) / n-1]内。
具体的计算过程为:
```python
max_score = max(scores) # n个评委给出的分数中的最高分
min_score = min(scores) # n个评委给出的分数中的最低分
your_score = 90 # 你给出的分数
avg_max = round((max_score + your_score) / (n - 1), 6) # 平均值的最大值
avg_min = round((min_score + your_score) / (n - 1), 6) # 平均值的最小值
result = (avg_min, avg_max)
print(result)
```
请注意,上述代码中的`your_score`是我随机给定的一个值,请根据实际情况替换为你自己给出的分数。
链接: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。对于每次操作输出修改后的中位数。
这个问题可以通过维护一个有序的序列来解决。首先,我们可以将序列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;
}
```
你可以将题目中给出的输入样例输入到这个程序中进行测试。希望对你有帮助!如果有任何疑问,请随时提问。
阅读全文