输入一个长度为 nn 的整数序列。
接下来输入 mm 个操作,每个操作包含三个整数 l,r,cl,r,c,表示将序列中 [l,r][l,r] 之间的每个数加上 cc。
请你输出进行完所有操作后的序列。
输入格式
第一行包含两个整数 nn 和 mm。
第二行包含 nn 个整数,表示整数序列。
接下来 mm 行,每行包含三个整数 l,r,cl,r,c,表示一个操作。
输出格式
共一行,包含 nn 个整数,表示最终序列。
数据范围
1≤n,m≤1000001≤n,m≤100000,
1≤l≤r≤n1≤l≤r≤n,
−1000≤c≤1000−1000≤c≤1000,
−1000≤整数序列中元素的值≤1000
代码:
#include<iostream> using namespace std; const int N =100010; int a[N],b[N]; void insert(int l,int r,int c ){ b[l]+=c;//这样a[l]及之后的数就都加上了c b[r+1]-=c;//打个补丁,让a[r]之后的数都减去c } int main() { int n,m; cin>>n>>m; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=1;i<=n;i++) insert(i,i,a[i]); //将b数组初始化为a数组的差分(a数组为b数组的前缀和) while(m--){ int l,r,c; cin>>l>>r>>c; insert(l,r,c); } for(int i=1;i<=n;i++) b[i]+=b[i-1];//将b数组更新为自身的前缀和数组 for(int i=1;i<=n;i++) cout<<b[i]<<" "; return 0; }