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

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

差分数组:

首先给定一个原数组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;
}
相关推荐
hanlin032 分钟前
动态规划专练:力扣第1035、392题
算法·leetcode·动态规划
九硕智慧建筑一体化厂家24 分钟前
打破系统孤岛!IBMS 一体化平台,构建智慧楼宇全域管控体系
运维·网络·人工智能·笔记·智慧城市
不正经学生40 分钟前
C语言大小端字节序:内存里字节的排列顺序
c语言·开发语言·arm开发·c++·算法·c#
黑泽明*43 分钟前
LVS-Keepalived-全解析
服务器·开发语言·笔记·学习·php
大模型探索者1 小时前
2026金融大模型训推平台选型指南:主流厂商横向对比与私有化落地
人工智能·算法·金融
熊猫钓鱼>_>1 小时前
Seedance 2.0 技术深度解析:重构AI视频生成的世界模型新范式
人工智能·笔记·ai·重构·音视频·变革·sedence2.0
小则又沐风a1 小时前
负载均衡式在线OJ---------第二幕
linux·c++·后端
a3535413821 小时前
C++项目如何架构优化
java·c++·架构
天天爱吃肉82182 小时前
【工程师硬件学习笔记:串口‑总线体系与三电试验室异构系统集成深度实战】
大数据·笔记·python·嵌入式硬件·学习·汽车
键盘会跳舞2 小时前
C++:智能指针源码级深度拆解——从 RAII 思想到引用计数的内存安全体系
c++·智能指针·unique_ptr·shared_ptr·weak_ptr