一维差分!!!

一维差分!!!,第1张

一维差分!!!

AcWing 797. 差分 【c++详细题解】 - AcWing

差分在解决一个数组[l,r]中间的每个元素全部加上一个常数c的问题上有很大的优势,差分是前缀和的逆运算,在实际解题过程中,往往差分和前缀和同时使用。

#include
#include
using namespace std;
int n, m, l, r, c;
int a[100001];
int b[100001];
int main()
{
	cin >> n >> m;
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];//注意始终原数组是a
		b[i] = a[i] - a[i - 1];//我们只是想办法构建一个b数组,然后在b数组的基础上去加常数
	}	
	while (m--)
	{
		cin >> l >> r >> c;
		b[l] += c;
		b[r + 1] -= c;//打补丁
	}
	for (int i = 1; i <= n; i++)
	{
		a[i] = a[i - 1] + b[i];//实际上这里就是在求新的数组了,前缀和的操作
		cout << a[i] << " ";
	}
	return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/3971536.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存