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. 微服务:openFeign

    openFeign是一个声明式http客户端.作用:基于springMVC常见注解,帮我们更优雅的实现http请求 引入依赖 <!--openFeign--> <dependency ...

  2. 【微信小程序】01 入门

    官方开发文档: https://developers.weixin.qq.com/miniprogram/dev/devtools/devtools.html 需要去微信公众平台注册开发账号: mp. ...

  3. 【IDEA】找不到类资源

    报错问题描述: 找不到这个实例调用的方法或者方法缺失重载 找不到这个声明的类资源 解决情况一 import声明缺失,IDEA智能导包提示可以解决 注意,如果存在了重名的类资源,导入了错误的资源,实例引 ...

  4. 【SVN】提交失败报错

    SVN提交失败: 最后信息是提示 请输入日志消息,至少需要20个字符,提交终止 问题原因是: 提交的时候不要把提交信息换行来写,SVN只会读取第一行内容 如果消息没有问题还提交失败,可能是文件因为提交 ...

  5. 【转载】【转载视频】 如何成为好的IT技术面试官

    在外网找到了一个IT技术面试官的面试心得,感觉还不错,挺有借鉴的,这里mark一下. 地址: https://www.youtube.com/watch?v=yFMmkoqDPlM ========= ...

  6. Apache SeaTunnel 社区 3 月月报

    各位热爱 SeaTunnel 的小伙伴们,SeaTunnel 社区 3 月月报来啦!这里将记录 SeaTunnel 社区每个月的重要更新,并评选出月度之星,欢迎关注. SeaTunnel 月度 Mer ...

  7. VUE learn

    Vue .js 的官方文档中是这样介绍它的. 简单小巧的核心,渐进式技术拢,足以应付任何规模的应用. 简单小巧是指 vue.js 压缩后大小仅有 17k .所谓渐进式(Progressive ),就是 ...

  8. PPT或Visio比较舒适的RGB配色参数

    1.187 204 235 2.222 156 83 3.117 156 83 4.64 116 52 5.117 121 74 6.69 137 148 7.182 194 154 8.207 19 ...

  9. [kubernetes]使用kubeadm和containerd部署kubernetes

    前言 因宿主机内核版本限制和垂直伸缩特性的需要,安装的k8s版本为1.25,runtime为containerd,cni为calico. containerd.kubeadm.kubelet也可以用包 ...

  10. ipv6 知识

    ref: 网络编程懒人入门(十一):一文读懂什么是IPv6 https://cloud.tencent.com/developer/article/1551346 IT知识大全:IPv6详解