AcWing 797. 差分(暴力求解会TLE)
原题链接
简单
作者:
minux
,
2020-04-20 12:37:56
,
所有人可见
,
阅读 436
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n, k;
int a[N], b[N];
// 仅在区间[l..r]中的元素增加c, 因此在区间右侧的元素需要减去c, 不然在做差分的累加和的时候会影响到r
// 右侧的元素
void inc(int l, int r, int c){
b[l]+=c;
b[r+1]-=c;
}
int main(){
cin>>n>>k;
memset(a, 0x00, sizeof a);
memset(b, 0x00, sizeof b);
for(int i=1; i<=n; ++i) cin>>a[i];
for(int i=1; i<=n; ++i) inc(i, i, a[i]);
// 构建差分序列
int l, r, c;
while(k--){
cin>>l>>r>>c;
inc(l, r, c);
}
for(int i=1; i<=n; ++i) b[i]+=b[i-1];
for(int i=1; i<=n; ++i) cout<<b[i]<<" ";
cout<<endl;
return 0;
}