小明的彩灯
题目链接:https://www.lanqiao.cn/problems/1276/learning/;
对于一段区间内的加上某个数或者减去某个数字,或者是求某个子段区间的元素之和,一般用前缀和还是差分的思想去优化
什么是前缀和?什么是差分呢?
这里转载一篇大佬的文章用来学习一下:
转载自:https://blog.csdn.net/weixin_45629285/article/details/111146240
那我们来看题:
1 #include2 using namespace std; 3 int n,q; 4 long long a[500100]; 5 long long b[500100]; 6 int main() 7 { 8 ios::sync_with_stdio(false); 9 cin>>n>>q; 10 for(register int i=1;i<=n;i++) 11 { 12 cin>>a[i]; 13 b[i]=a[i]-a[i-1];//构造差分数组 14 } 15 while(q--) 16 { 17 int l,r,x; 18 cin>>l>>r>>x; 19 b[l]+=x;//头上加一个x 20 b[r+1]-=x;//尾巴减一个x 21 } 22 for(register int i=1;i<=n;i++) 23 { 24 a[i]=b[i]+a[i-1];//回归原数组 25 if(a[i]<0) 26 cout<<"0"<<' '; 27 else 28 cout<' '; 29 } 30 return 0; 31 }