差分
y总的不太好记,自己按照自己的思路写了一个
其实就是把最初的数列当作S数列,第一步先求出q数列,即前缀和的逆步骤
然后如果要在 l - r 内加 v,只需要在q[l] += v ,q[r + 1] -=v就好了
C++ 代码
#include <iostream>
using namespace std;
int n,m;
const int N = 1e5 + 10;
int a[N],s[N];
int main(){
cin >> n >> m;
for(int i = 1;i <= n;++i)
cin >> s[i];
for(int i = 1;i <= n;++i){
a[i] = s[i] - s[i - 1];
}
while(m--){
int l,r,v;
cin >> l >> r >> v;
a[l] += v;
a[r + 1] -= v;
}
for(int i = 1;i <= n;++i){
s[i] = s[i - 1] + a[i];
cout << s[i] <<" ";
}
cout << endl;
return 0;
}