1.练习项目:
问题描述
给定一个长度为 nn 的数组 a[1],a[2],...,a[n]。 同时给定 m 个操作,每个操作有三个整形数据 x,y,z。 每个操作的意义就是给数组中下标为 x 与下标为 y 之间(包括 x,y)的元素的值加上 z。
输入格式
输入有多组数据,数据组数不大于 5。 每一组数据第一行有两个整数 n,m(0<n,m<105) 。 第二行有 n 个整数,分别代表 a[1],a[2],...,a[n](0≤a[i]<10)的初始值。 接下来就 m 行,每一行有 3 个整数 x,y,z(0<x≤y≤n,0<z<10)。
输出格式
在一行内输出这个序列的所有元素的值,并且每个值之间应该以空格隔开。
2.选择课程
在蓝桥云课中选择题库,选择题号3291并开始练习。
3.开始练习
(1)源码:
#include<bits/stdc++.h>
const int N=1e5+9;
using namespace std;
int a[N],diff[N];
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int n,m;
while(cin>>n>>m){
for(int i=1;i<=n;i++)
cin>>a[i];
for(int i=1;i<=n;i++)
diff[i]=a[i]-a[i-1];
while(m--){
int x,y,z;
cin>>x>>y>>z;
diff[x]+=z;
diff[y+1]-=z;
}
for(int i=1;i<=n;i++)
a[i]=diff[i]+a[i-1];
for(int i=1;i<=n;i++)
cout<<a[i]<<' ';
cout<<endl;
}
return 0;
}
(2)检验结果
对此代码进行检验,检验后无报错,提交此代码,判题结果为正确100分。
(3)练习心得:注意每段代码末尾的分号是否存在,如不存在则需即使补充;输入法是否切换为英语模式;语法是否错误。