pbds学习笔记

发布时间 2024-01-12 10:33:22作者: hubingshan

头文件及命名空间

万能头:#include<bits/extc++.h>
命名空间:using namespace __gnu_pbdsusing namespace __gnu_cxx

优先队列

通常会使用配对堆
定义__gnu_pbds::priority_queue<int,greater<int>,pairing_heap_tag> q;
这是小根堆,如果要大根堆的话把中间那个换成\(\text{less<int>}\)

定义迭代器__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):将对应迭代器的权值改为 \(x\)
q.join(p):将同类型的堆\(p\)合并到\(q\)上,并清空\(p\)

复杂度

这些操作的复杂度都是小于等于 \(O(logn)\) 的,部分可做到 \(O(1)\),完全优于std堆

哈希

平衡树

rope(块状链表)