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)
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