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;
}
相关推荐
aaaameliaaa2 小时前
字符函数和字符串函数
c语言·笔记·算法
城管不管3 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
似的8353 小时前
一步一步学习使用FireMonkey动画() 使用TAnimator类创建动画
linux·学习·nginx
月疯3 小时前
二分法算法(水平等分图形面积)
算法
tq10864 小时前
开放与封闭:类型系统的安全哲学
笔记
fanged4 小时前
总线学习3--SPI番外(TODO)
学习
豆瓣鸡4 小时前
算法日记 - Day3
java·开发语言·算法
白白白小纯4 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
Achou.Wang4 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
龙仔7254 小时前
人大金仓 KingbaseES V8 只读账号创建完整运维笔记
运维·笔记·sql·人大金仓