【算法】差分算法详解(模板)

类似于数学中的求导和积分之间的关系,差分可以看成前缀和的逆运算。

差分数组:

首先给定一个原数组a:a1, a2, a3,,,,,, an;

然后我们构造一个数组b : b1 ,b2 , b3,,,,,, bi;

使得 ai = b1 + b2 + b3 +,,,,,, + bi

也就是说,a数组是b数组的前缀和数组,反过来我们把b数组叫做a数组的差分数组。换句话说,每一个ai都是b数组中从头开始的一段区间和。

注意:始终要记得,a数组是b数组的前缀和数组,比如对b数组的bi的修改,会影响到a数组中从ai及往后的每一个数。

例题:

分析:

首先让差分b数组中的 bl + c ,a数组变成 al + c ,al+1 + c,,,,,, an + c;

然后我们让br+1 - c,所得的数组就只是在l,r区间之内加c

补充:全局变量如果在定义时没有赋初值,编译器会自动赋初值为0

局部变量不可以

cpp 复制代码
#include<iostream>
#define N 100010
using namespace std;

int arr[N],diff[N];//全局变量 
int main(){
	int n,m;
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>arr[i];
		diff[i]=arr[i]-arr[i-1];
	}
	int l,r,c;
	for(int i=1;i<=m;i++){
		cin>>l>>r>>c;
		diff[l]+=c;
		diff[r+1]-=c;
	}
	for(int i=1;i<=n;i++){
		arr[i]=diff[i]+arr[i-1];
		cout<<arr[i]<<" ";
	}
	return 0;
}
相关推荐
蹊黎2 小时前
C++中vector类的部分简单实现
开发语言·c++·visual studio
qq_284274052 小时前
机械设计基础·滚动轴承全解(类型·代号·选型·寿命)+轮系与蜗杆蜗轮传动
笔记·学习·自动化·制造
强哥聊算力5 小时前
《算力江湖·英伟达传奇》第七集:ChatGPT出现前夜,英伟达发生了什么?
服务器·人工智能·算法·ai·chatgpt·gpu算力
ACP广源盛139246256737 小时前
硬件选型笔记:国产 PCIe Gen2.1 交换芯片 IX6024@ACP,工控与存量设备国产化改造方案评估
笔记·硬件架构·硬件工程·pcie·国产芯片
文人sec8 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
Navigator_Z8 小时前
LeetCode //C - 1289. Minimum Falling Path Sum II
c语言·算法·leetcode
CCblandy8 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
摇滚侠9 小时前
《计算机是如何工作的:人人都能懂的计算机软硬件工作原理》第 9 章 机器码与汇编语言 阅读笔记 9
java·开发语言·笔记
xier_ran9 小时前
【infra之路】AI 编译器学习笔记(六):重拾 C++——lambda 与 MLIR 中的回调
c++·笔记·学习
志尊宝9 小时前
Vue3 零基础每日笔记(078):首屏加载速度优化汇总——清单化方案
笔记