acwing-差分
差分
输入一个长度为 n 的整数序列。
接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r][�,�] 之间的每个数加上 c。
请你输出进行完所有操作后的序列。
输入格式
第一行包含两个整数 n 和 m。
第二行包含 n 个整数,表示整数序列。
接下来 m行,每行包含三个整数 l,r,c,表示一个操作。
输出格式
共一行,包含 n 个整数,表示最终序列。
数据范围
1≤n,m≤100000,
1≤l≤r≤n,
−1000≤c≤1000,
−1000≤整数序列中元素的值≤1000−1000≤整数序列中元素的值≤1000
输入样例:
1 | 6 3 |
输出样例:
1 | 3 4 5 3 4 2 |
差分是前缀和的逆运算,用于快速计算一段区间内加上某一个常数
- 构建
a
的差分数组b
,同时a
是b的前缀和数组。 b[l]+c
后,a
数组变为a[l]+c,a[l+1]+c...a[r]+c,a[r+1]+c...a[n]+c
b[r+1]-c
后,a
数组变为a[l]+c,a[l+1]+c...a[r]+c,a[r+1]+c-c...a[n]+c-c
。就实现了[l,r]
区间每个数加上c
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 面试资料!