解题思路:
-
分析问题,最直观的办法是暴力,但是在数据量1E5的情况下时间复杂度是达不到要求的。
-
引入差分数组,降低时间复杂度,对于构造差分数组对于.
-
对于每一次区间[l,r]修改v,有,因为当左边界加上v时, 最后只要就更新一遍原始数组的值,就得到了答案。
#include<bits/stdc++.h>
using namespace std;
int main(){
int n, m;
cin>>n>>m;
vector<long long> v(n+1,0);
vector<long long> cf(n+1);
for(int i = 1; i <= n; ++i){
scanf("%lld", &v[i]);
cf[i] = v[i] - v[i-1];
}
int l, r, a;
for(int i = 0; i < m; ++i){
scanf("%d%d%d",&l,&r,&a);
cf[l] += a;
if(r+1 <= n) cf[r+1] -= a;
}
for(int i = 1; i < n; ++i){
v[i] = v[i-1] + cf[i];
cout<<v[i]<<" ";
}
cout<<v[n-1]+cf[n]<<endl;
return 0;
}