差分+前缀和

简介: **题目:输入一个长度为 n 的整数序列。接下来输入 m 个操作,每个操作包含三个整数 l,r,c,表示将序列中 [l,r] 之间的每个数加上 c。

**题目:

输入一个长度为 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

输入样例:

6 3

1 2 2 1 2 1

1 3 1

3 5 1

1 6 1

输出样例:

3 4 5 3 4 2**

源码:

include <bits/stdc++.h>

using namespace std;

int main()

{

int n,m;
cin >> n>>m;
int arr[n],brr[n+1]={0};
for (int i = 0; i < n; i ++ )
{
cin >> arr[i];
}
for (int j = 0; j < m; j ++ )
{
int l,r,c;
cin >> l>>r>>c;
    brr[l-1]+=c;
    brr[r]-=c;
}
for(int i=1;i<n;i++)
{
    brr[i]=brr[i]+brr[i-1];
}
for(int i=0;i<n;i++)
{
    arr[i]=arr[i]+brr[i];
cout << arr[i]<<" ";
}
return 0;

}

在文章末尾总结一下差分的诀窍吧,(初学,勿喷):

第一:首先定义一个空数组b,初始值全为零;(b的数组下标值要比原数组a的范围大于一,即a[n],b[n+1]);

第二:对b进行题目中的操作;

第三:求操作后的b的前缀和;

第四:原数组a的每一项加上b相对应的每一项;

第五:输出几位答案;

目录
相关文章
|
28天前
|
算法
【算法】前缀和——二维前缀和模板题
【算法】前缀和——二维前缀和模板题
|
10月前
前缀和、差分、二分
前缀和、差分、二分
57 0
|
4月前
|
算法 测试技术 C#
【动态规划】【前缀和】【和式变换】100216. K 个不相交子数组的最大能量值
【动态规划】【前缀和】【和式变换】100216. K 个不相交子数组的最大能量值
|
2月前
|
人工智能 算法 JavaScript
【算法】前缀和与差分
算法学习——前缀和与差分(含一维和二维)
30 4
【算法】前缀和与差分
|
4月前
|
算法 C++
c++算法学习笔记 (5)前缀和+差分
c++算法学习笔记 (5)前缀和+差分
|
4月前
|
存储 人工智能 BI
差分与前缀和
差分与前缀和
26 0
|
4月前
|
算法 C++
枚举与尺取法 差分与前缀和
枚举与尺取法 差分与前缀和
26 0
|
4月前
|
人工智能 算法
基础算法--前缀和与差分
基础算法--前缀和与差分
|
4月前
|
人工智能 移动开发 算法
算法基础:前缀和与差分
算法基础:前缀和与差分
63 1
算法基础:前缀和与差分
差分前缀和题目集
差分前缀和题目集
40 0