小明的彩灯

题目链接:https://www.lanqiao.cn/problems/1276/learning/;

对于一段区间内的加上某个数或者减去某个数字,或者是求某个子段区间的元素之和,一般用前缀和还是差分的思想去优化

什么是前缀和?什么是差分呢?

这里转载一篇大佬的文章用来学习一下:

转载自:https://blog.csdn.net/weixin_45629285/article/details/111146240

那我们来看题:

 1 #include<bits/stdc++.h>
 2 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<<a[i]<<' '; 
29     }
30     return 0;
31 }

 

posted @ 2022-04-01 19:46  江上舟摇  阅读(76)  评论(0编辑  收藏  举报