数据结构
今天主要讲了数据结构中的并查集,线段树和平衡树,还有很多很多很多的数据结构题。
然后很多题都刷新了我对信息竞赛的理解,所以有必要总结学到的知识和技巧。
首先,并查集。
模板就不说了,主要是一些技巧。
1. 带权并查集 例题:
2. 启发式并查集,复杂度O(nlongn)
简单来讲就是不路径压缩的并查集,然后在每次合并的时候将树规模小的连到规模大的(size)上。
例题:
然后,线段树。
一. 线段树模板
1. 线段树单点修改/查询 PASS
2. 线段树区间修改/查询 区间加 PASS 区间乘
二. 线段树的运用
1. 一些(区间)题目常用思路就是枚举右端点,同时维护一个s数组(用线段树),这个维护需要因题置疑,有许多不同的维护方法,这两天就碰到了三四道这个思路的题。 例题:
2. 线段树+并查集 例题:
3. 线段树保存两种信息,总之花式线段树 例题:
4. 整体二分区间,二分加线段树 例题:区间第k大数(K-th number)
5. 线段树的启发式合并 例题:
平衡树。
一. 平衡树模板
1. Treap PASS
2. Splay
二. 平衡树的运用
1. 很多,是的。 例题:NOI2005维护序列
其他小技巧和小算法
1. 尺取法 例题:面积并问题
2. 从O(n)复杂度到O(logn)的常见思路,二分,线段树,树状数组,平衡树。
例题总会:
1. K-th number的一系列变形
2. 艹,不记得了
最后,要会的STL:
1. set
2. vector
3.map
4. multiset