1、STL / gnu_pbds
1、vector<int>
常用,动态空间注意比较慢,远古题数据小才建议使用。
支持操作 | 复杂度 |
---|---|
序列类别 | |
随机访问 | \(O(1)\) |
尾部插入删除 | \(O(1)\) |
随机插入删除 | \(O(玄学),O(\sqrt{n})\) |
集合类别 | |
none |
2、set<int>
维护数集的,它的常数真的很奇妙。
支持操作 | 复杂度 |
---|---|
序列类别 | |
none | |
集合类别 | |
前驱后继 | \(O(\log(n))\) |
随机插入删除 | \(O(\log(n))\) |
查找某数 | \(O(\log(n))\) |
3、rope
维护序列,不熟,跳过,但是可以区间覆盖,所以能通过文艺平衡树板子,操作复杂度 \(O(\sqrt{n})\)。
4、pbds_tree
标准的平衡树了。
只能维护数集,功能略强于 set。
支持操作 | 复杂度 |
---|---|
序列类别 | |
none | |
集合类别 | |
前驱后继 | \(O(\log(n))\) |
随机插入删除 | \(O(\log(n))\) |
查找某数 | \(O(\log(n))\) |
查询数的排名 | \(O(\log(n))\) |
查询 kth | \(O(\log(n))\) |
数据结构
0、链表
指针位置插入删除,指针移动一格 \(O(1)\)。
1、块状链表
很难写,还不如写平衡树 / vector。
支持类型不重要,我不会写的。(
2、值域线段树
很复杂,先跳了。
3、树状数组上二分
很神奇的一种操作,没有随机插入时很好用。
支持操作 | 复杂度 |
---|---|
序列类别 | |
随机访问 | \(O(\log(n))\) |
头尾部插入删除 | \(O(\log(n))\) |
随机删除 | \(O(\log(n))\) |
集合类别 | |
none |