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,最后要扫一遍更新答案;