平衡树
头文件
| #include<ext/pb_ds/assoc_container.hpp> |
| #include<ext/pb_ds/tree_policy.hpp> |
| using namespace __gnu_pbds; |
特点
- 不支持重复元素,但可以pair或结构体凑合一下
- 支持更多的平衡树操作 求排名、找第k大、树合并、树分裂
- 第k大(第k小)的编号从0开始
- 存在自定义和维护节点信息的接口
- 偏向工程,所以常数较大
- 封装了红黑树、splay树、avl树
速度
- 开了O2后可以当作大常数的平衡树使用
- splay和rbtree谁快看运气
- 没开O2很容易t
- 适合用在小题大做的时候,因为代码量真的很小
声明
| tree<pii,null_type,less<pii>,rb_tree_tag,tree_order_statistics_node_update> tr; |
- pii: 存储的类型
- null_type: 无映射 (低版本g++为null_mapped_type)
- less<pii>: 从小到大排序(或者greater<>)
- rb_tree_tag: 红黑树(或者 splay_tree_tag)
- tree_order_statistics_node_update //更新方式
函数功能
| #define p pair<int,int> |
| #define mp(x,y) make_pair(x,y) |
| tr.insert(mp(x,y)); |
| tr.erase(mp(x,y)); |
| tr.order_of_key(p(x,y)); |
| tr.find_by_order(x); |
| tr.join(b); |
| tr.split(v,b); |
| tr.lower_bound(x); |
| tr.upper_bound(x); |
| |
less<> 和 greater<>
- 是一种函数的模板,是一个结构体化的函数
- 目的大概是将操作符当作对象来传递
c++11 中的实现
| template <class T> struct less { |
| bool operator() (const T& x, const T& y) const {return x<y;} |
| typedef T first_argument_type; |
| typedef T second_argument_type; |
| typedef bool result_type; |
| }; |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现