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
OI算法竞赛中的树形数据结构
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
MaskRay
July 26, 2011
Programming
16k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
OI算法竞赛中的树形数据结构
OI算法竞赛中的树形数据结构
MaskRay
July 26, 2011
More Decks by MaskRay
See All by MaskRay
gcov与Clang中的实现
maskray
0
440
r2con 2017 r2cLEMENCy
maskray
3
14k
Cyber Grand Challenge及DEFCON 24 CTF决赛介绍
maskray
3
28k
Introduction to Makefile
maskray
2
16k
8门编程语言的设计思考
maskray
1
15k
Implementing a Simple Interpreter
maskray
0
300
2011年信息学竞赛冬令营《星际探险》
maskray
1
15k
Other Decks in Programming
See All in Programming
AI時代に設計が 最大の生産性レバーになる 意図駆動開発とデータを消さない設計|Don't Delete Your Data or Your Intent — Design as the Deepest Lever in the AI Era
tomohisa
1
1.1k
Built Our Own Background Agent at LayerX
layerx
PRO
10
5.9k
言葉の格闘技のススメ~紙とペンと言葉から始める、キャリアの描き方~
progresscicada
2
170
全PRの83%がAIレビューだけでマージできるようになった開発組織はその後どうなったか
athug
1
1.9k
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
6.9k
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
360
VibeCodingからAgenticWorkflowへ
starfish719
0
730
リアルな遅延を測る仕様
kota_yata
1
120
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
340
freeeにおけるEvalsの実践例の紹介
freee
PRO
0
140
170k Jobs a Day on GKE: Scaling Mercari's CI Platform - and What's Next for AI-Native Development
junyaokabe
0
120
「人を評価する AI」の設計と実装
ryoyanara
0
220
Featured
See All Featured
Writing Fast Ruby
sferik
630
63k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
290
The Limits of Empathy - UXLibs8
cassininazir
1
610
Joys of Absence: A Defence of Solitary Play
codingconduct
1
440
Building Experiences: Design Systems, User Experience, and Full Site Editing
marktimemedia
0
580
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.4k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
440
Six Lessons from altMBA
skipperchong
29
4.5k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.4k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
250
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
Transcript
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 . . . . . . . 数据结构 宋方睿 2011-07-23
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 Outline . . . 1 数据结构 . . . 2 例题
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 并査集 . Example (例题) . . . . . . . . http://poj.org/problem?id=1182 NOI 食物链(不必分 类讨论) http://poj.org/problem?id=1988 Cube Stacking http://poj.org/problem?id=1733 Parity game(有增强 版) 无向图,询问和一个点连通的权值最大的点,或删除 一条边: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCo 无向图,删点,问连通块数:JSOI 2008 星球大战
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 线段树 操作 查询(当前线段被查询线段覆盖、递归查询当前线段 的左半部分和右半部分) 修改(当前线段被修改线段覆盖、递归修改当前线段 的左半部分和右半部分) 例题 段修改,点查询:http://poj.org/problem?id=2528 段修改,位运算:http://poj.org/problem?id=2777 段修改,查找最左边足够长的空位: http://poj.org/problem?id=3667 有若干连续段,查询某一段中最长连续段: http://poj.org/problem?id=3368
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 二叉查找树 . 操作 . . . . . . . . 插入一个元素 删除一个元素 lower_bound upper_bound 查找第 k 小 获取指定元素名次
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 二叉查找树 . 操作 . . . . . . . . 插入一个元素 删除一个元素 lower_bound upper_bound 查找第 k 小 获取指定元素名次 . Example (例题) . . . . . . . . NOI 2004 郁闷的出纳员 双端优先队列: http://poj.org/problem?id=3481 http://poj.org/problem?id=1442
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 树状数组 . 操作 . . . . . . . . 点增减 段求和 段增减 查找第 k 小 线性时间建树
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 树状数组 . Example (例题) . . . . . . . . 二维点修改,矩形查询: http://poj.org/problem?id=1195 结合 DFS:http://poj.org/problem?id=3321 Apple Tree 段增减,段求和:http://poj.org/problem?id=3468 A Simple Problem with Integers
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 可合并堆 . Example (例题) . . . . . . . . http://acm.hdu.edu.cn/showproblem.php?pid=1512
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 数据结构 Splay Tree . Example (例题) . . . . . . . . 1˜N 的排列进行若干次翻转操作后输出结果: http://acm.sgu.ru/problem.php?contest=0&problem=187 点插入/删除/替换,询问最大子段和: http://www.spoj.pl/problems/GSS6/ http://poj.org/problem?id=3580 SuperMemo
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 昨天的邓永行的题 . 简化大意 . . . . . . . . 优化 fi = min fj + |j − i − ai|
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 ”Dynamic” Inversion . 大意 . . . . . . . . 1˜N(1<=N<=200000) 的排列,依次删除 M(1<=M<=100000) 个数,输出每次删除后的逆序数。 解法 线段树套二叉查找树 逆序处理操作,可以转化为只有插入
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 PKU 2104 K-th Number . 大意 . . . . . . . . 长为 N(1<=N<=100000) 的序列,处理 M(1<=M<=5000) 的询问,每次询问一连续段中第 k 小的数。
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 PKU 2104 K-th Number . 大意 . . . . . . . . 长为 N(1<=N<=100000) 的序列,处理 M(1<=M<=5000) 的询问,每次询问一连续段中第 k 小的数。 . 解法 . . . . . . . . 俗称“归并树”的解法 俗称“划分树”的解法
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 PKU 2761 Feed the dogs K-th Number 的变化 . 大意 . . . . . . . . 长为 N(1<=N<=100000) 的序列,处理 M(1<=M<=50000) 的询问,每次询问一连续段中第 k 小 的数。区间不会互相包含。
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 PKU 2761 Feed the dogs K-th Number 的变化 . 大意 . . . . . . . . 长为 N(1<=N<=100000) 的序列,处理 M(1<=M<=50000) 的询问,每次询问一连续段中第 k 小 的数。区间不会互相包含。 . 解法 . . . . . . . . 把所有询问区间按起始端点排序,维护第 k 小的数
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 ZJU 2112 Dynamic Rankings K-th Number 的变化 . 大意 . . . . . . . . 长为 N(1<=N<=50000) 的序列,处理 M(1<=M<=10000) 的操作。操作有如下两种: 修改 a[i] 询问一连续段中第 k 小的数
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 ZJU 2112 Dynamic Rankings K-th Number 的变化 . 大意 . . . . . . . . 长为 N(1<=N<=50000) 的序列,处理 M(1<=M<=10000) 的操作。操作有如下两种: 修改 a[i] 询问一连续段中第 k 小的数 . 解法 . . . . . . . . 二分,线段树套二叉查找树, O(n log n + m log B(log n)2) O((n + m) log(n + m) + m log n log(n + m))
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 HDU 2473 Junk-Mail Filter . 简化大意 . . . . . . . . 合并两个集合;从一个集合中去除一个元素(该元素自成 一个集合) 。
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 Beijing WinterCamp 2011 纸箱堆叠 . 大意 . . . . . . . . 纸箱 A 能放在纸箱 B 上当且仅当旋转后 A 的长宽高都大 于 B 的,问最多能叠几个箱子。
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 Beijing WinterCamp 2011 纸箱堆叠 . 大意 . . . . . . . . 纸箱 A 能放在纸箱 B 上当且仅当旋转后 A 的长宽高都大 于 B 的,问最多能叠几个箱子。 . 解法 . . . . . . . . 线段树套二叉查找树 线段树套树状数组 树状数组套树状数组
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 SHTSC 2009 会场预约 . 大意 . . . . . . . . 维护两种操作: 有一个新的预约是从“start 日”到“end 日” ,并且拒 绝掉所有与它相冲突的预约,输出拒绝掉的预约个数 输出当前仍然有效的预约的总数 解法 二叉查找树 线段树
. . . .. . . . .. . .
. .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . .. . . . .. . . . . .. . . . .. . . . . .. . . . .. . . . .. . 数据结构 例题 SDTSC 2008 郁闷的小 J 大意 长为 N(1<=N<=100000) 的序列,处理 M(1<=M<=100000) 个操作,操作有两种形式: 修改某个位置上的数 询问某一连续段中某数出现次数 解法 用线段树将询问区间分成 $O(log n)$ 的区间,每个区 间存二叉查找树,关键字为数值 每个数值存二叉查找树,关键字为位置 二叉查找树维护 (值, 位置) 二元组 每次集中处理一个数,树状数组维护位置 (值, 位置) 离散化后用树状数组维护