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;
}
相关推荐
浅念-1 小时前
C++ 模板初阶:从泛型编程到函数模板与类模板
c语言·开发语言·数据结构·c++·笔记·学习
Bear on Toilet1 小时前
BFS_FloodFill_46 . 腐烂的橘子问题
数据结构·c++·算法·leetcode·宽度优先
大模型玩家七七1 小时前
关系记忆不是越完整越好:chunk size 的隐性代价
java·前端·数据库·人工智能·深度学习·算法·oracle
橙河网络1 小时前
橙河网络:国外问卷调查好做吗?有具体的步骤讲解吗?
经验分享·笔记·课程设计
样例过了就是过了1 小时前
LeetCode热题100 找到字符串中所有字母异位词
算法·leetcode
DevilSeagull1 小时前
C语言: C语言内存函数详解
c语言·开发语言·算法
知识分享小能手2 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 创建和使用索引 — 语法知识点及使用方法详解(12)
数据库·学习·sqlserver
搞科研的小刘选手2 小时前
【人工智能专题】2026年人工智能与生成式设计国际学术会议(ICAIGD 2026)
人工智能·算法·aigc·生成式ai·学术会议·计算机工程·生成式设计
橘色的喵2 小时前
一个面向工业嵌入式的 C++17 Header-Only 基础设施库
c++·嵌入式·工业·基础库·head-only