Slide 1

Slide 1 text

Segment Tree 基础篇

Slide 2

Slide 2 text

Range Minimum/Maximum Query •需求:在饿了么的⼀个⽤户的历史订单中,找出该⽤户指定⼀段 时间内单笔订单最贵/最便宜的订单 One problem •O(n), when query K —> ∞ times ?

Slide 3

Slide 3 text

Range Minimum/Maximum Query •需求:在饿了么的⼀个⽤户的历史订单中,求出找出该⽤户指定 ⼀段时间内累积消费总⾦额 Another problem •O(n), when query K —> ∞ times ? •prefixSum, time O(n), query O(1)

Slide 4

Slide 4 text

Range Minimum/Maximum Query •需求:在 12306 ⽹站上,统计⼀条线路上任意指定两个站点之间 的可售出的票数总和 One more thing •O(n), when query K —> ∞ times ? •prefixSum, time O(n), update O(n), query O(1)

Slide 5

Slide 5 text

How to ? Range Minimum/Maximum Query 5 O(log n) or O(1) ?

Slide 6

Slide 6 text

Presentation agenda 6 What How to use Leetcode example What is segment tree 2 3 1 How Example

Slide 7

Slide 7 text

Define Segment Tree 7 1. ❌ Complete Binary Tree 2. ∈ Balanced Binary Tree 3. As Full binary tree

Slide 8

Slide 8 text

How many node Segment Tree 8 0-level : 1 1-level : 2 2-level : 4 3-level : 8 4-level : 16 (n-1)—level :2^(n-1) n-level:2^n Σ 0-(n-1) level:Σ = 2^n - 1 ≈ n-level => 2n Mathematical Induction:Σ = 4n (n = 2^k or n = 2^k + 1)

Slide 9

Slide 9 text

How many node Segment Tree 9 •When n≥3, [1,n] segment split [1,n] into 2*⌊log (n-1)⌋ sub- Interval •4n ≥ 2*⌊log (n-1)⌋ <= 2n ≥ log (n-1) <= 4^n ≥ n-1

Slide 10

Slide 10 text

How to create Segment Tree 10

Slide 11

Slide 11 text

How to query Segment Tree 11 ❗

Slide 12

Slide 12 text

How to update Segment Tree 12 ❗

Slide 13

Slide 13 text

How to update Segment Tree 13 •Update [2,3] ? •❌ O(n)

Slide 14

Slide 14 text

How to update Segment Tree 14 •Update [2,3] ? •✅O(log n)

Slide 15

Slide 15 text

How to update Segment Tree 15

Slide 16

Slide 16 text

How to query Segment Tree 16 •push_down

Slide 17

Slide 17 text

How to update Segment Tree 17 •push_down + push_up

Slide 18

Slide 18 text

How to low space Segment Tree 18 •Leetcode 715

Slide 19

Slide 19 text

Compared ST VS Array 19 20% 80% 60% 40% 2585 785 Update: Array O(n) | Segment Tree O(log n) Query: Array O(n) | Segment Tree O(log n)

Slide 20

Slide 20 text

Segment Tree 20 Example

Slide 21

Slide 21 text

Segment Tree 21 Example

Slide 22

Slide 22 text

Segment Tree 22 Example

Slide 23

Slide 23 text

Boyer-Moore Majority Vote Algorithm 23 Example

Slide 24

Slide 24 text

Segment Tree 24 Example

Slide 25

Slide 25 text

Segment Tree 25 Example •judge threshold •count = map[1:[0 1 4 5] 2:[2 3]] •eg: 1 in [0,5] count , twice binary search, find [lowerBound, upperBound) •(upperBound - lowerBound) ≥ threshold

Slide 26

Slide 26 text

Segment Tree 26 •Leetcode 327. Count of Range Sum •Leetcode 715. Range Module •Leetcode 699. Falling Squares & 732. My Calendar III •Leetcode 850. Rectangle Area II •Leetcode 218. The Skyline Problem Exercise

Slide 27

Slide 27 text

Advance 27 15% 35% 50% •One point update (update: min/change, query: sum/min) •Interval update (update: min/change, query: sum/hash) •Discretization •Interval merge •Scan line •Binary Index Tree