差分(无需考虑差分数组构造的模板)

复制代码

输入一个长度为 nn 的整数序列。

接下来输入 mm 个操作,每个操作包含三个整数 l,r,cl,r,c,表示将序列中 [l,r][l,r] 之间的每个数加上 cc。

请你输出进行完所有操作后的序列。

输入格式

第一行包含两个整数 nn 和 mm。

第二行包含 nn 个整数,表示整数序列。

接下来 mm 行,每行包含三个整数 lrcl,r,c,表示一个操作。

输出格式

共一行,包含 nn 个整数,表示最终序列。

数据范围

1n,m1000001≤n,m≤100000,
1lrn1≤l≤r≤n,
1000c1000−1000≤c≤1000,
10001000

代码:


#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; }
复制代码

 

posted @   zzq12138  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示