Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Segment Tree Basics
Search
halfrost
January 15, 2020
Programming
0
860
Segment Tree Basics
halfrost
January 15, 2020
Tweet
Share
More Decks by halfrost
See All by halfrost
Redis multi-data center two-way synchronization
halfrost
0
480
Redis design ideas and usage specifications
halfrost
0
360
Golang message streaming practice in Eleme
halfrost
0
340
SQL practical optimization
halfrost
0
340
Fundamentals of Cryptography
halfrost
0
260
The practice of spatial index in geographic service
halfrost
0
340
Getting started with Machine Learning
halfrost
0
240
Functional Reactive Programming
halfrost
0
270
Eleme Report
halfrost
1
330
Other Decks in Programming
See All in Programming
App Router 悲喜交々
quramy
7
380
Jakarta EE as Seen Trough the Lens of the ASF
ivargrimstad
0
160
Pythonによるイベントソーシングへの挑戦と現状に対する考察 / Challenging Event Sourcing with Python and Reflections on the Current State
nrslib
3
1.3k
文化が生産性を作る
jimpei
3
570
コードレビューと私の過去と未来
jxmtst
0
280
クラウドサービスの 利用コストを削減する技術 - 円安の真南風を感じて -
pyama86
3
390
.NET Aspireのクラウド対応検証: Azureと他環境での実践
ymd65536
1
480
型付きで行うVSCode拡張機能開発 / VSCode Meetup #31
mazrean
0
240
5年分のツケを一気に払った話
soogie
3
1.4k
Competitionsだけじゃない! Kaggle Notebooks Grandmasterのすすめ
corochann
1
360
Cancel Next.js Page Navigation: Full Throttle
ypresto
1
190
DevFest Android in Korea 2024 - 안드로이드의 문단속 : 앱을 지키는 암호화 이야기
mdb1217
1
160
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
How GitHub Uses GitHub to Build GitHub
holman
473
290k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
46
4.9k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
504
140k
Unsuck your backbone
ammeep
668
57k
Creatively Recalculating Your Daily Design Routine
revolveconf
217
12k
Statistics for Hackers
jakevdp
796
220k
Building Your Own Lightsaber
phodgson
102
6k
Designing Experiences People Love
moore
138
23k
For a Future-Friendly Web
brad_frost
174
9.3k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
228
52k
Transcript
Segment Tree 基础篇
Range Minimum/Maximum Query •需求:在饿了么的⼀个⽤户的历史订单中,找出该⽤户指定⼀段 时间内单笔订单最贵/最便宜的订单 One problem •O(n), when query
K —> ∞ times ?
Range Minimum/Maximum Query •需求:在饿了么的⼀个⽤户的历史订单中,求出找出该⽤户指定 ⼀段时间内累积消费总⾦额 Another problem •O(n), when query
K —> ∞ times ? •prefixSum, time O(n), query O(1)
Range Minimum/Maximum Query •需求:在 12306 ⽹站上,统计⼀条线路上任意指定两个站点之间 的可售出的票数总和 One more thing
•O(n), when query K —> ∞ times ? •prefixSum, time O(n), update O(n), query O(1)
How to ? Range Minimum/Maximum Query 5 O(log n) or
O(1) ?
Presentation agenda 6 What How to use Leetcode example What
is segment tree 2 3 1 How Example
Define Segment Tree 7 1. ❌ Complete Binary Tree 2.
∈ Balanced Binary Tree 3. As Full binary tree
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)
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
How to create Segment Tree 10
How to query Segment Tree 11 ❗
How to update Segment Tree 12 ❗
How to update Segment Tree 13 •Update [2,3] ? •❌
O(n)
How to update Segment Tree 14 •Update [2,3] ? •✅O(log
n)
How to update Segment Tree 15
How to query Segment Tree 16 •push_down
How to update Segment Tree 17 •push_down + push_up
How to low space Segment Tree 18 •Leetcode 715
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 20 Example
Segment Tree 21 Example
Segment Tree 22 Example
Boyer-Moore Majority Vote Algorithm 23 Example
Segment Tree 24 Example
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
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
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