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。

相关推荐
用户938515635072 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
To_OC3 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
饼干哥哥4 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者5 小时前
Transformer模型部署之性能优化指南
算法
地平线开发者6 小时前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月8 小时前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星9 小时前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试
小月土星9 小时前
JavaScript 递归入门:从 1 到 n 求和,再到数组扁平化
javascript·算法·面试
To_OC1 天前
LC 1 两数之和:面试第一道必考题,暴力解法直接被面试官 pass
javascript·算法·leetcode