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。

相关推荐
CQU_JIAKE1 天前
8.22【A】
算法
xiaoxiangsiyan1 天前
全网IPv6规模化改造实战指南
运维·网络·笔记·云原生·自动化
大熊背1 天前
ISP图像处理中大数乘法溢出处理(一)
人工智能·python·算法·溢出处理
Wang's Blog1 天前
PostgreSQL笔记59:行列级权限机制与数据脱敏实践
数据库·笔记·postgresql
wabs6661 天前
关于栈【力扣1047. 删除字符串中的所有相邻重复项的思考】
数据结构·c++·算法·leetcode··代码随想录
疯狂打码的少年1 天前
【数据结构】选择类排序:简单选择与堆排序
java·数据结构·笔记·算法
那年窗外下的雪.1 天前
Linux 学习笔记
linux·笔记·学习
爱奥尼欧1 天前
【daily practice】最长数字串怎么找?岛屿数量如何沉岛秒数?六棍拼两三角形有几种验法?(5.字符串中找出连续最长的数字串、岛屿数量、拼三角)
笔记·学习
晚风醉蝶1 天前
1-16-计数排序-CountingSort
python·算法·排序算法
疯狂打码的少年1 天前
【数据结构】排序算法:归并排序与基数排序
数据结构·笔记·算法·排序算法