平衡树的简单替代品

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
posted @ 2024-05-10 11:50  Fun_Strawberry  阅读(67)  评论(0)    收藏  举报