easy problem

题目描述

给定n个数ai,有m次操作,每个操作是给al~ar
增加一个数k,最终输出操作完后的这n个数的值
输入
第一行一个数n,
接下来n行n个数ai
第n+2行一个数m
接下来m行每行三个数l,r,k
输出a[1]~a[n]

样例输入

7

1 3 5 1 4 1 6

1

3 5 1

样例输出

1 3 6 2 5 1 6

代码

 1 #include<cstdio>
 2 using namespace std;
 3 int n,m,a[1000],l,r,k,s[1000];
 4 int main()
 5 {
 6     scanf("%d",&n);
 7     for(int i = 1;i <= n;i++)
 8     {
 9         scanf("%d",&a[i]);
10         s[i] = a[i] - a[i-1];
11     }
12     scanf("%d",&m);
13     for(int i = 1;i <= m;i++)
14     {
15         scanf("%d%d%d",&l,&r,&k);
16         s[l] += k;
17         s[r+1] -= k;
18     }
19     for(int i = 1;i <= n;i++)
20     {
21         a[i] = a[i-1] + s[i];
22         s[i] = a[i] - a[i-1];
23     }
24     for(int i = 1;i <= n;i++)
25     {
26         printf("%d ",a[i]);
27     }
28     return 0;
29     
30 } 


题解

s[i]维护差值,l~r加k相当于s[l]+=k,s[r+1]-=k,最后要扫一遍更新答案;

原文地址:https://www.cnblogs.com/peppa/p/9714455.html