using namespace __gnu_pbds;

Luogu Post#39

1.堆

1.1 基本信息

头文件

#include <ext/pb_ds/priority_queue.hpp>

定义

__gnu_pbds::priority_queue<T,Compare,Tag,[*]Allocator>

[T] : typename
[Compare [=greater<T>/less<T>/comp]] : compare function
[Tag [=pairing_heap_tag]] : Heap Type *1

*1

HeapType 共有 pairing_heap_tag ,binary_heap_tag ,binomial_heap_tag ,rc_binomial_heap_tag ,thin_heap_tag 五种

OI-wiki 如是说:

至少对于 OIer 来讲,除了配对堆的其他四个 tag 都是鸡肋,要么没用,要么常数大到不如 std 的,且有可能造成 MLE,故这里只推荐用默认的配对堆

构造举例

__gnu_pbds::priority_queue<int(,gteater<int>)>;

迭代器

__gnu_pbds ::priority_queue<int>::point_iterator iter;

1.2 成员函数 (Tag=pairing_heap_tag)

push() [\(O(1)\)] 插入元素并返回其迭代器

pop() [\(\Theta(log\ n,n)\)] 删除顶端(极值)元素

top() [\(O(1)\)] 返回顶端(极值)元素

modify(point_iterator,key) [\(\Theta(log\ n,n)\)] 修改迭代器所在位置的值

erase(point_iterator) [\(\Theta(log\ n,n)\)] 删除迭代器位置的元素

join(__gnu_pbds :: priority_queue) [\(O(1)\)] 合并到当前堆(删除另一个堆)

size() [\(O(1)\)]

empty() [\(O(1)\)]

所以,这个堆最大的优点在合并很快,否则还是用 STD 吧.

2.平衡树

2.1 基本信息

头文件

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>

定义

__gnu_pbds ::tree<Key,Mapped,Cmp_Fn,Tag,Node_Update,[*]Allocator>

[Key] : typename
[Mapped [Mapped-Policy]=null_type] : *1
[Cmp_Fn=std::less<Key>] : compare function
[Tag=rb_tree_tag] : Tree Type *2
[Node_Update=null_tree_node_update] *3

*1

Mapped 指示了存储容器类型,Mapped=null_type 时近似为 std::set,Mapped=Value 时近似为 std::map<Key, Value>

*2

TreeType 共有 rb_tree_tag ,splay_tree_tag ,ov_tree_tag(类似 ordered_vector) 三种

*3

另外一种参数为 tree_order_statistics_node_update,如果你需要查询排名请使用

构造举例

tree<int,null_type,greater<int>,splay_tree_tag> s;

迭代器

tree<int,null_type,greater<int>,splay_tree_tag>::point_iterator iter;

2.2 成员函数

insert() 插入元素,返回 pair<point_inerator,bool>

erase() 删除 [元素/迭代器],返回 bool

order_of_key() 返回元素的排名

find_by_order() 返回排名对应元素的迭代器

join(tree) 合并两棵树,并删除另一颗(需要保证并入树的键的值域与被并入树的键的值域不相交)

split(Key x,tree b) 小于等于 x 的留在当前树中,否则移到 b 树中

lower_bound()\upper_bound()

empty()

size()

3.哈希表

定义

cc_hash_table<Key,Value>;
gh_hash_table<Key,Value>;

一般来说 cc_hash_table 速度不如 gh_hash_table,不过 gh 会被卡哈希

防止自己被卡哈希的办法(?)

#include<chrono>
const int RANDOM = std::chrono::high_resolution_clock::now().time_since_epoch().count();
struct chash{
inline int operator()(int x)const{
return x ^RANDOM;
}
};
gp_hash_table<int,int,chash> s;

字典树

字典树都不会写你还是回炉重造吧

[OI] pb_ds的更多相关文章

  1. STL++?pb_ds平板电视初步探索

    什么是pb_ds? 除了众所周知的STL库,c++还自带了ext库(应该可以这么叫吧),其中有用pb_ds命名的名称空间(俗称平板电视).这个名称空间下有四个数据类型结构.这些都是鲜为人知的.经过测试 ...

  2. 在 Prim 算法中使用 pb_ds 堆优化

    在 Prim 算法中使用 pb_ds 堆优化 Prim 算法用于求最小生成树(Minimum Spanning Tree,简称 MST),其本质是一种贪心的加点法.对于一个各点相互连通的无向图而言,P ...

  3. [bzoj3224][tyvj1728][普通平衡树] (pb_ds库自带红黑树)

    Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...

  4. 谈c++ pb_ds库(二) 红黑树大法好

    厉害了,没想到翻翻pb_ds库看到这么多好东西,封装好的.现成的splay.红黑树.avl... 即使不能在考场上使用也可以用来对拍哦 声明/头文件 #include <ext/pb_ds/tr ...

  5. 再见,OI

    你好,NOIP 2015年9月1日 正式成为了福建省莆田一中的一名高一成员 后来学校搞了选修 大家都很激动 因为自己的兴趣和特长能够得到发挥了(或者说能逃课或者看好多电影) 发现选修提供的选项中有好几 ...

  6. 告别我的OI生涯

    本文章写于2008年12月15日. 随着2008noip的结束,我也结束了我的OI生涯. 信息竞赛也许是从小到大让我最最努力的一件事.我记得参加2006noip初赛前,每天中午为了上信息课都吃不上中午 ...

  7. 收集一些关于OI/ACM的奇怪的东西……

    一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...

  8. 继续OI

    NOIP2016于2016.11.20日12:00正式结束. 我作为oi的生涯 或许会结束? 或者继续? 然而前途依然迷茫,我是否应该继?或是放弃? 距离省选还有3~4个月,我该何去何从? 虽然已经经 ...

  9. 再见OI

    NOIP2016终章 自己弱还脑残加手残 再见OI 你好高考 你好明天 "没有泪水的日子会轻松很多 但我的心还是会痛" ------------------------------ ...

  10. 【线段树套平衡树】【pb_ds】bzoj3196 Tyvj 1730 二逼平衡树

    线段树套pb_ds里的平衡树,在洛谷OJ上测试,后三个测试点TLE #include<cstdio> #include<algorithm> #include<ext/p ...

随机推荐

  1. 解决vue.js出现Vue.js not detected错误

    第一:在拓展应用的文件夹中找到文件manifest.json,打开并将此处的false改成true. 第二:在vuejs devtool拓展程序的详情页中开启以下两个选项 如果你看到这,恭喜你,看到全 ...

  2. Linux服务器PBS任务队列作业提交脚本的使用方法

      本文介绍在Linux服务器中,通过PBS(Portable Batch System)作业管理系统脚本的方式,提交任务到服务器队列,并执行任务的方法.   最近,需要在学校公用的超算中执行代码任务 ...

  3. keycloak~为微信二维码添加动态kc认可的动态state

    本实例将通过keycloak社区登录实现微信二维码的登录,并且二微码不是keycloak动态生成,而是通过微信提供的js生成的,在页面上直接输出的方式实现的. 动态state 在Keycloak中使用 ...

  4. 【MySQL】DB-Link 跨库访问

    相关说明: https://blog.csdn.net/qq_48721706/article/details/124088963 DB-LINK以一个远程访问方式访问其他MYSQL实例 连接实例和被 ...

  5. 前端RSA密钥生成和加解密——window.crypto使用相关

    转自简书,原文地址,本文介绍window.crypto关于RSA方面的API. crypto API支持常用的rsa.aes加解密,这边介绍rsa的应用. 浏览器兼容性 window.crypto需要 ...

  6. 鹏城实验室——启智平台使用外部docker镜像 —— 实测并不可用,该功能可用性较低

    参考: https://bbs.openi.org.cn/forums/5492 需要注意,目前只有NVIDIA GPU运行环境下允许使用外部docker镜像. 注意: 对于该功能实测后发现可用性不高 ...

  7. 再测python3.13a —— python3.13是否移除了GIL的限制(续)

    前文: python3.13是否移除了GIL的限制 x86_64 ubuntu22.04环境下编译版本python3.13.0 alpha 0源码--python3.13.0 alpha 0的源码编译 ...

  8. 阿里modelscope下载模型

    个人上传的模型地址:(需要注意,这个模型参数只做测试之用,并无实际意义) https://modelscope.cn/models/devilmaycry812839668/devil/summary ...

  9. 深度解读KubeEdge架构设计与边缘AI实践探索

    摘要:解读业界首个云原生边缘计算框架KubeEdge的架构设计,如何实现边云协同AI,将AI能力无缝下沉至边缘,让AI赋能边侧各行各业,构建智能.高效.自治的边缘计算新时代,共同探索智能边缘的新篇章. ...

  10. Orleans初体验

    Orleans: 是一个跨平台框架,用于构建可靠且可缩放的分散式应用. 分布式应用定义为跨多个进程的应用,通常使用对等通信来超越硬件边界. 从单个本地服务器扩展到了云中数千个分布式.高度可用的应用. ...