代码拉取完成,页面将自动刷新
//
// Created by wangliewei on 2021/8/16.
//
/*前缀和的逆运算,比如前缀和里面的s数组成为a数组的前缀和,
那么a数组就可以称为s数组的差分
原题的操作是针对前缀和数组,现在改为在差分数组上操作,可以
把时间复杂度总O(N)降到O(1),最后在求个和即可
所以关键在于搞明白在前缀和数组上的操作如何等价于在差分数组上
的操作
*/
#include<iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N],b[N];
void insert(int l, int r, int c){
b[l] += c;
b[r + 1] -= c;
}
int main(){
int n, m;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
for (int i = 1; i<=n; i++){
insert(i, i, a[i]);
}
while (m--) {
int l, r, c;
scanf("%d%d%d", &l, &r, &c);
insert(l, r, c);
}
//把b[]变成他自己的前缀和
for (int i = 1 - 1; i <= n; i++){
b[i] = b[i-1] + b[i];
}
for (int i = 1; i <= n; i++){
printf("%d ", b[i]);
}
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。