题解 | #【模板】差分#
【模板】差分
http://www.nowcoder.com/practice/4bbc401a5df140309edd6f14debdba42
描述
给一个长度为的数组,次操作,每次将区间加,问次操作后的数组
思路
- 差分模板题,由于仅有一次查询,因此可以利用前缀和的性质,设数组表示次操作后,每个位置增加的数为多少,则每次操作将,,最后对数组求前缀和
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN=1e5+5;
ll sum[MAXN],a[MAXN];
int main()
{
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%lld",&a[i]);
while(m--)
{
int l,r,k;
scanf("%d%d%d",&l,&r,&k);
sum[l]+=k;
sum[r+1]-=k;
}
for(int i=1;i<=n;i++)
sum[i]+=sum[i-1];
for(int i=1;i<=n;i++)
printf("%lld ",a[i]+sum[i]);
puts("");
}
时间复杂度,空间复杂度