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;
}
相关推荐
海海不瞌睡(捏捏王子)17 分钟前
C++ 知识点概要
开发语言·c++
会编程的土豆18 分钟前
【数据结构与算法】优先队列
数据结构·算法
中屹指纹浏览器41 分钟前
2026基于内核隔离的浏览器环境虚拟化技术在企业数字化运营中的应用研究
经验分享·笔记
一轮弯弯的明月1 小时前
Python基础-速通秘籍(下)
开发语言·笔记·python·学习
minji...2 小时前
Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending
linux·运维·服务器·网络·数据结构·c++·算法
罗湖老棍子2 小时前
最大数(信息学奥赛一本通- P1549)(洛谷-P1198)
数据结构·算法·线段树·单点修改 区间求最大值
charlie1145141913 小时前
2026年正点原子开发板移植方案——从0开始的Rootfs之路(3)inittab 与 init 系统:Linux 启动的“第一号进程“全解析
linux·驱动开发·学习·嵌入式开发·嵌入式linux
小O的算法实验室3 小时前
2026年KBS,赏金猎人优化算法+多无人机移动边缘计算与路径规划,深度解析+性能实测
算法·无人机·边缘计算
用户5671504710214 小时前
OpenClaw 记忆管理系统技术文档
算法
wsx_iot4 小时前
TDengine学习
数据库·学习·tdengine