题解 | 【模板】差分
【模板】差分
https://www.nowcoder.com/practice/4bbc401a5df140309edd6f14debdba42
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
using ull=unsigned long long;
using i128=__int128_t;
using u128=__uint128_t;
using ld=long double;
void solve()
{
int n,m,l,r,k;
cin >> n >> m;
vector<ll>v(n+1,0),num(n+1,0);//分别是原数组和差分数组 差分数组用来记录操作全部结束之后每个元素应该加上的值
for(int i=1;i<=n;i++) cin >> v[i];
while(m--)
{
cin >> l >> r >> k;
num[l]+=k;
num[r+1]-=k;
}
for(int i=1;i<=n;i++)//构造差分数组 然后让原数组每个元素加上对应的差分数组中的元素
{
num[i]+=num[i-1];
v[i]+=num[i];
}
for(int i=1;i<=n;i++) cout << v[i] << " ";
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t=1;
//cin >> t;
while(t--)
{
solve();
}
return 0;
}

查看6道真题和解析