给定两个正整数n,m,再给定长度为n的正整数序列a, 保证n为奇数。接下来m行,每行两个正整数p, x。表示把a[p]修改为x。对于每次操作输出修改后的中位数。 输入描述: 第一行输入两个正整数n,m 第二行给定n个正整数表示序列a 1~a n 接下来m行每行给定两个数p,x,表示将a[p]修改为x。 1<=n<=1e6,1<=m<=1e5 ∀1<=i<=n,1<=ai<=1e6 ∀1<=i<=n,1<=a i<=1e6 1<=x<=1e6 输出描述: 对于每次操作输出每次操作后序列的中位数的值。
时间: 2024-04-12 16:28:58 浏览: 256
我们第一行包括两个整数n,k(1<=n<=100,k<=6e5),表示有n个数字,目标和为k 第二行输入n个整数(c1 c2
题目要求给定一个长度为n的正整数序列a,接下来根据m次操作将序列中的某个数修改为x。每次操作后,需要输出修改后的序列的中位数。
解题思路:
1. 首先,读取输入的n和m。
2. 然后,读取长度为n的正整数序列a。
3. 接下来,根据m次操作,将序列a中的某个数修改为x,并输出修改后的序列的中位数。
4. 重复第3步m次。
代码实现如下:
```python
import bisect
# 读取输入
n, m = map(int, input().split())
a = list(map(int, input().split()))
# 初始化有序列表
sorted_a = sorted(a)
# 输出初始序列的中位数
print(sorted_a[n // 2])
# 处理m次操作
for _ in range(m):
p, x = map(int, input().split())
# 找到原来的值在有序列表中的位置
idx = bisect.bisect_left(sorted_a, a[p-1])
# 删除原来的值
del sorted_a[idx]
# 插入新的值
bisect.insort_left(sorted_a, x)
# 更新原始序列
a[p-1] = x
# 输出修改后的序列的中位数
print(sorted_a[n // 2])
```
希望对你有帮助!如果还有其他问题,请随时提问。
阅读全文