【问题描述】 输入一个长度为n的整数序列。 接下来输入m个操作,每个操作包含三个整数l,r,c,表示将序列中[l,r]之间的每个数加上c。 请你输出进行完所有操作后的序列。 【输入格式】 第一行包含两个整数n和m。 第二行包含n个整数,表示整数序列。 接下来m行,每行包含三个整数l,r,c表示一个操作。 【输出格式】 共一行,包含n个整数,表示最终序列。 【数据范围】 1≤n,m≤100000, 1≤l≤r≤n,
时间: 2024-03-17 08:41:53 浏览: 333
C++算法:第 N 位数字原理、源码、测试用例
【样例输入】
5 3
1 2 3 4 5
1 3 2
3 5 -1
2 4 1
【样例输出】
3 4 5 6 5
【算法思路】
题目要求对序列进行多次修改,可以使用差分的思想,即将每次修改的区间[l,r]的左端点l加上c,右端点r+1加上-c。最后再对整个序列求前缀和,即可得到修改后的序列。
【Python代码】
```python
n, m = map(int, input().split())
a = list(map(int, input().split()))
# 差分数组
d = [0] * (n + 1)
for i in range(1, n + 1):
d[i] = a[i - 1] - a[i - 2]
# 执行m次操作
for i in range(m):
l, r, c = map(int, input().split())
d[l] += c
if r < n:
d[r + 1] -= c
# 求前缀和
for i in range(2, n + 1):
d[i] += d[i - 1]
# 输出结果
for i in range(1, n + 1):
print(d[i], end=' ')
```
阅读全文