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

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

差分数组:

首先给定一个原数组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 分钟前
人类视频与机器人示教的数据配比:分层训练的数据采购与采集设计
人工智能·算法
Ivanqhz14 分钟前
MoE 原理、TC/EC 路由、LSH-MoE 与负载均衡浅析
运维·网络·人工智能·深度学习·算法·机器学习·负载均衡
Sarvartha16 分钟前
栈的四则运算、栈的递归应用
数据结构·算法
stolentime23 分钟前
CF2277E Tree Guessing题解
c++·算法·贪心算法·交互·ad-hoc
跨知易知识产权23 分钟前
美国专利确权是什么,和专利诉讼有什么不一样?
笔记
杨逢昌工厂6S管理26 分钟前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
悟道书生34 分钟前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
逐光者93339 分钟前
杨氏模量:从定义到工程应用
算法
陈哈哈11111 小时前
折腾了半天,总算把 Vim 9.2 装明白了
笔记
陈哈哈11111 小时前
折腾了半天,总算把 OpenGL 的开发环境给装明白了
笔记