SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
数据结构

.
.

数据结构
宋方睿

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)$ 的区间,每个区
间存二叉查找树,关键字为数值
每个数值存二叉查找树,关键字为位置
二叉查找树维护 (值, 位置) 二元组
每次集中处理一个数,树状数组维护位置
(值, 位置) 离散化后用树状数组维护
..

.
..

.
..

.

. . . . . . . . . . . .
.. .. .. .. .. .. .. .. .. .. .. .. ..

.
..

.
..

.
..

.
..

.

Weitere ähnliche Inhalte

Ähnlich wie OI算法竞赛中树形数据结构

PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1March Liu
 
8门编程语言的设计思考
8门编程语言的设计思考8门编程语言的设计思考
8门编程语言的设计思考Ray Song
 
数据分析系统架构设计
数据分析系统架构设计数据分析系统架构设计
数据分析系统架构设计学峰 司
 
Linux 期末報告
Linux 期末報告Linux 期末報告
Linux 期末報告米米 林
 
《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书ikewu83
 
R Language definition
R Language definitionR Language definition
R Language definition湘云 黄
 
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社pingjiang
 
Stefan js游戏引擎
Stefan js游戏引擎Stefan js游戏引擎
Stefan js游戏引擎fanzhongkai
 
Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期yiditushe
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化colderboy17
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化guiyingshenxia
 
钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材Sun Wen
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptxjames tong
 
本書特色適用讀者
本書特色適用讀者本書特色適用讀者
本書特色適用讀者sugeladi
 
Ibatis Sql Map中文指南
Ibatis Sql Map中文指南Ibatis Sql Map中文指南
Ibatis Sql Map中文指南yiditushe
 
一次Web性能测试小结
一次Web性能测试小结一次Web性能测试小结
一次Web性能测试小结beiyu95
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践wubx
 
Acm算法模板
Acm算法模板Acm算法模板
Acm算法模板Jacky Lee
 
神经网络与深度学习
神经网络与深度学习神经网络与深度学习
神经网络与深度学习Xiaohu ZHU
 
Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期yiditushe
 

Ähnlich wie OI算法竞赛中树形数据结构 (20)

PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1PostgreSQL Introduction V0.1
PostgreSQL Introduction V0.1
 
8门编程语言的设计思考
8门编程语言的设计思考8门编程语言的设计思考
8门编程语言的设计思考
 
数据分析系统架构设计
数据分析系统架构设计数据分析系统架构设计
数据分析系统架构设计
 
Linux 期末報告
Linux 期末報告Linux 期末報告
Linux 期末報告
 
《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书《云计算核心技术剖析》Mini书
《云计算核心技术剖析》Mini书
 
R Language definition
R Language definitionR Language definition
R Language definition
 
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
数据结构(用面向对象方法与C++语言描述第二版)殷人昆编著清华大学出版社
 
Stefan js游戏引擎
Stefan js游戏引擎Stefan js游戏引擎
Stefan js游戏引擎
 
Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期Csdn Emag(Oracle)第二期
Csdn Emag(Oracle)第二期
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化
 
阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化阿里巴巴 叶正盛 数据库性能量化
阿里巴巴 叶正盛 数据库性能量化
 
钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材钢筋抽样软件Ggj10.0教材
钢筋抽样软件Ggj10.0教材
 
我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx我对后端优化的一点想法.pptx
我对后端优化的一点想法.pptx
 
本書特色適用讀者
本書特色適用讀者本書特色適用讀者
本書特色適用讀者
 
Ibatis Sql Map中文指南
Ibatis Sql Map中文指南Ibatis Sql Map中文指南
Ibatis Sql Map中文指南
 
一次Web性能测试小结
一次Web性能测试小结一次Web性能测试小结
一次Web性能测试小结
 
基于Innodb开发的最佳实践
基于Innodb开发的最佳实践基于Innodb开发的最佳实践
基于Innodb开发的最佳实践
 
Acm算法模板
Acm算法模板Acm算法模板
Acm算法模板
 
神经网络与深度学习
神经网络与深度学习神经网络与深度学习
神经网络与深度学习
 
Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期Csdn Emag(Oracle)第四期
Csdn Emag(Oracle)第四期
 

Mehr von Ray Song

C++ exception handling
C++ exception handlingC++ exception handling
C++ exception handlingRay Song
 
RISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLDRISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLDRay Song
 
gcov和clang中的实现
gcov和clang中的实现gcov和clang中的实现
gcov和clang中的实现Ray Song
 
r2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyr2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyRay Song
 
Implementing a Simple Interpreter
Implementing a Simple InterpreterImplementing a Simple Interpreter
Implementing a Simple InterpreterRay Song
 
2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》Ray Song
 
Introduction to makefile
Introduction to makefileIntroduction to makefile
Introduction to makefileRay Song
 

Mehr von Ray Song (7)

C++ exception handling
C++ exception handlingC++ exception handling
C++ exception handling
 
RISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLDRISC-V Linker Relaxation and LLD
RISC-V Linker Relaxation and LLD
 
gcov和clang中的实现
gcov和clang中的实现gcov和clang中的实现
gcov和clang中的实现
 
r2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCyr2con 2017 r2cLEMENCy
r2con 2017 r2cLEMENCy
 
Implementing a Simple Interpreter
Implementing a Simple InterpreterImplementing a Simple Interpreter
Implementing a Simple Interpreter
 
2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》2011年信息学竞赛冬令营《星际探险》
2011年信息学竞赛冬令营《星际探险》
 
Introduction to makefile
Introduction to makefileIntroduction to makefile
Introduction to makefile
 

OI算法竞赛中树形数据结构