用差分的思想做前缀和,做完以后将差分前缀和数组以及原数组做叠加,即可达到同样的效果。更加容易理解。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int n,m,l,r,c,a[N],b[N],x[N];
int main(){
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++){
scanf("%d", &a[i]);
}
for (int i = 1; i <= m; i++){
scanf("%d %d %d", &l, &r, &c);
x[l] += c;
x[r+1] -= c;
}
for (int i = 1; i <= n; i++){
b[i] = b[i-1] + x[i];
cout << a[i]+b[i] << " ";
}
return 0;
}