Acwing-基础算法课笔记之基础算法(差分)

Acwing-基础算法课笔记之基础算法(差分)

一、一维差分

1、差分的概念

对于一个给定的序列a,它的差分序列b定义为:
b [ 1 ] = a [ 1 ] b[1]=a[1] b[1]=a[1], b [ i ] = a [ i ] − a [ i − 1 ] b[i]=a[i]-a[i-1] b[i]=a[i]−a[i−1], ( 2 ⩽ i ⩽ n ) (2\leqslant i\leqslant n) (2⩽i⩽n)

b是a的差分序列,a是b的前缀和序列,差分与前缀和是一对互逆运算
a [ 1 ] = b [ 1 ] a[1]=b[1] a[1]=b[1],
a [ 2 ] = b [ 2 ] + a [ 1 ] = b [ 2 ] + b [ 1 ] a[2]=b[2]+a[1]=b[2]+b[1] a[2]=b[2]+a[1]=b[2]+b[1],
a [ 3 ] = b [ 3 ] + a [ 2 ] = b [ 3 ] + b [ 2 ] + b [ 1 ] a[3]=b[3]+a[2]=b[3]+b[2]+b[1] a[3]=b[3]+a[2]=b[3]+b[2]+b[1],证毕

2、差分思想

把序列a的区间 [ l , r ] [l,r] [l,r]加d,等价于其差分序列b的点 b [ l ] b[l] b[l]加d,点 b [ r + 1 ] b[r+1] b[r+1]减d,其他位置不变。即把原序列的"区间操作 "转化为差分序列的"两点操作 "。多次区间操作完成后,再利用前缀和还原。时间复杂度从 O ( n 2 ) O(n^2) O(n2)降为 O ( n ) O(n) O(n)

二、二维差分

操作流程

(x1,y1) * * * *
* * * * *
* * * * *
* * * * (x2,y2)

① b [ x 1 , y 1 ] + = c b[x1,y1]+=c b[x1,y1]+=c:坐标 ( x 1 , y 1 ) (x1,y1) (x1,y1)右下区域的所有数加 c c c;

② b [ x 2 + 1 , y 1 ] − = c b[x2+1,y1]-=c b[x2+1,y1]−=c:坐标 ( x 2 + 1 , y 1 ) (x2+1,y1) (x2+1,y1)右下区域的所有数减 c c c;

③ b [ x 1 , y 2 + 1 ] − = c b[x1,y2+1]-=c b[x1,y2+1]−=c:坐标 ( x 1 , y 2 + 1 ) (x1,y2+1) (x1,y2+1)右下区域的所有数减 c c c;

④ b [ x 2 , y 2 ] + = c b[x2,y2]+=c b[x2,y2]+=c:坐标 ( x 2 , y 2 ) (x2,y2) (x2,y2)右下区域的所有数多减了 c c c,所以要全部加 c c c。

相关推荐
sheeta19981 小时前
LeetCode 每日一题笔记 日期:2026.05.13 题目:1674. 使数组互补的最少操作次数
笔记·算法·leetcode
liulilittle1 小时前
TCP UCP v1.0:BBR 的非破坏性约束层
网络·c++·网络协议·tcp/ip·算法·c·通信
每天回答3个问题1 小时前
LeetCodeHot100|回溯算法、46.全排列、78.子集、17.电话号码的字母组合
算法·深度优先·回溯
叁散1 小时前
实验项目1 LTE通信原理与应用
笔记·其他
AOwhisky2 小时前
Docker 学习笔记:镜像分发、容器运行与资源限制
笔记·学习·docker
Liangwei Lin2 小时前
LeetCode 287. 寻找重复数
算法·leetcode·职场和发展
OCR_133716212753 小时前
护照OCR校验位技术解析:从算法逻辑到工程落地,筑牢证件核验安全线
人工智能·算法
Hello.Reader3 小时前
算法基础(十三)——随机算法为什么有时主动引入随机性
java·数据库·算法
老鱼说AI3 小时前
现代 LangChain 开发指南:从 LCEL 原理到企业级 RAG 与 Agent 实战
java·开发语言·人工智能·深度学习·神经网络·算法·机器学习
小许同学记录成长4 小时前
基于幅度形态与参数聚类的工作模式判别
python·算法·scikit-learn