18| 差分数组

一、核心思路

采用差分数组的思想,将原数组某个区间上的修改转化为差分数组边界上两点值的修改。反过来再利用用前缀和来还原原数组。

差分数组

还原原数组 ​​

二、代码实现

cpp 复制代码
typedef long long LL;
const int N = 1e6;
int n, q;
LL a[N], f[N];
int main ()
{
	cin >> n >> q;
	// 公式来构造差分数组 
	for (int i = 1; i <= n; i++)
	{
		cin >> a[i];
		f[i] = a[i] - a[i-1]; 
	}
	// 执行操作
	while(q--)
	{
		int l, r, d; cin >> l >> r >> d;
		f[l] += d;
		f[r+1] -= d;
	 } 
	 // 利用前缀和还原原数组
	 for (int i = 1; i <= n; i++)
	 {
	 	a[i] = a[i-1] + f[i];
	 	cout << a[i] << " ";
	  } 
	return 0;
}
cpp 复制代码
typedef long long LL;
const int N = 1e6;
int n, q;
LL f[N];
int main ()
{
	cin >> n >> q;
	// 利用性质来构造差分数组 
	for (int i = 1; i <= n; i++)
	{
		int x; cin >> x;
		f[i] += x;
		f[i+1] -= x; 
	}
	// 执行操作
	while(q--)
	{
		int l, r, d; cin >> l >> r >> d;
		f[l] += d;
		f[r+1] -= d;
	 } 
	 // 利用前缀和还原原数组
	 for (int i = 1; i <= n; i++)
	 {
	 	f[i] = f[i-1] + f[i];
	 	cout << f[i] << " ";
	  } 
	return 0;
}
相关推荐
aaPIXa6221 分钟前
C++大型项目模块化拆分实战记录
开发语言·c++
cxr8285 分钟前
第16章 跨域迁移与能力融合——从专家到通才
人工智能·算法·智能体·hermes
石山代码9 分钟前
C++23 新特性在 CLion 中的实战体验
开发语言·c++·c++23
浮江雾10 分钟前
Flutter第四节------核心概念学习笔记:从基础语法到异步编程
linux·服务器·开发语言·笔记·flutter·入门·基础
学究天人12 分钟前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(补充卷9)
人工智能·线性代数·算法·数学建模·动态规划·原型模式·抽象代数
Keven_1119 分钟前
算法札记:图的存储方式
算法·图论
在线OJ的阿川20 分钟前
仿muduo库实现高并发服务器
linux·服务器·c++
斯文的八宝粥28 分钟前
SERL:让真机强化学习从“难用”走向“可复现”的强化学习框架 ----(4)算法篇(DrQ vs VICE)
算法
yangdaxiageo37 分钟前
算法时代的“心智置顶“:《功夫女足》如何构建GEO正向飞轮
人工智能·科技·算法·aigc
坚定学代码37 分钟前
C++ SOLID 原则(上):单一职责、开闭原则与里氏替换
c++