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

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

一、一维差分

1、差分的概念

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

b是a的差分序列,a是b的前缀和序列,差分与前缀和是一对互逆运算 。
a 1 = b 1 a1=b1 a1=b1,
a 2 = b 2 + a 1 = b 2 + b 1 a2=b2+a1=b2+b1 a2=b2+a1=b2+b1,
a 3 = b 3 + a 2 = b 3 + b 2 + b 1 a3=b3+a2=b3+b2+b1 a3=b3+a2=b3+b2+b1,证毕

2、差分思想

把序列a的区间 l , r l,r l,r加d,等价于其差分序列b的点 b l bl bl加d,点 b r + 1 br+1 br+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 bx1,y1+=c bx1,y1+=c:坐标 ( x 1 , y 1 ) (x1,y1) (x1,y1)右下区域的所有数加 c c c;

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

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

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

相关推荐
AI备案指南-满满几秒前
算法备案审核不通过,一般是什么原因?
java·人工智能·算法·大模型备案·算法备案·大模型登记
Ramble_Naylor12 分钟前
Rust深度解读:Send 与 Sync 的本质与线程安全边界
python·算法·rust
秋天的怀念_David13 分钟前
算法一千零一夜 · 第二十三夜 电力民生写成的曲线
java·程序人生·算法
不一样的故事12615 分钟前
NB/T 47013.8-2015 附录D 吸枪技术
人工智能·经验分享·算法
通问AI20 分钟前
用 200 行 Python 给文档库做「上下文完整度」自检:四个可复算的检查项
算法
揽星河..40 分钟前
【C语言】扫雷游戏
c语言·算法·游戏
丘山录1 小时前
本地部署 LongCat-2.5,要 7 台机器我只有 4 台
人工智能·算法
Allen_LVyingbo1 小时前
NVIDIA CUDA Tile 在医疗计算中的算子形式化、算法重构与内核实现
大数据·python·算法·重构·知识图谱·健康医疗·数据库架构
程序边界1 小时前
一台数据集成软件的拆解笔记(下):一致性、容错、跑批与迁移,KFS 真正难的地方在这
java·前端·笔记
冻柠檬飞冰走茶2 小时前
PTA刷题集之Airline Routes(C语言实现)
c语言·开发语言·数据结构·算法