pbds学习笔记
头文件及命名空间
万能头:#include<bits/extc++.h>
命名空间:using namespace __gnu_pbds
和using namespace __gnu_cxx
优先队列
通常会使用配对堆
定义__gnu_pbds::priority_queue<int,greater<int>,pairing_heap_tag> q;
这是小根堆,如果要大根堆的话把中间那个换成
定义迭代器__gnu_pbds::priority_queue<int,greater<int>,pairing_heap_tag>::point_iterator its[N];
常用操作:
it=q.push(x)
:这个操作会返回插入位置对应的迭代器,可以把每个点的迭代器记下来,这样可以随时修改任意点的权值
q.pop()
q.top()
q.size()
q.empty()
q.clear()
q.modify(it,x)
:将对应迭代器的权值改为
q.join(p)
:将同类型的堆
复杂度
这些操作的复杂度都是小于等于
哈希
通常使用开放寻址
定义gp_hash_table<int,int> mp;
用法
和map一样
平衡树
通常使用红黑树做内核
定义tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> T;
第三个位置可以自己手写cmp函数
常见用法
T.insert(x)
T.erase(x)
it=T.find_by_order(k)
:查询排名为
k=order_of_key(x)
:查询
it=T.lower_bound(x)
it=T.upper_bound(x)
T1.join(T2)
:把
T1.split(v,T2)
:把
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】