[OI] pb_ds
using namespace __gnu_pbds;
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的更多相关文章
- STL++?pb_ds平板电视初步探索
什么是pb_ds? 除了众所周知的STL库,c++还自带了ext库(应该可以这么叫吧),其中有用pb_ds命名的名称空间(俗称平板电视).这个名称空间下有四个数据类型结构.这些都是鲜为人知的.经过测试 ...
- 在 Prim 算法中使用 pb_ds 堆优化
在 Prim 算法中使用 pb_ds 堆优化 Prim 算法用于求最小生成树(Minimum Spanning Tree,简称 MST),其本质是一种贪心的加点法.对于一个各点相互连通的无向图而言,P ...
- [bzoj3224][tyvj1728][普通平衡树] (pb_ds库自带红黑树)
Description 您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作: 1. 插入x数 2. 删除x数(若有多个相同的数,因只删除一个) 3. 查询x数的排名(若有多个相 ...
- 谈c++ pb_ds库(二) 红黑树大法好
厉害了,没想到翻翻pb_ds库看到这么多好东西,封装好的.现成的splay.红黑树.avl... 即使不能在考场上使用也可以用来对拍哦 声明/头文件 #include <ext/pb_ds/tr ...
- 再见,OI
你好,NOIP 2015年9月1日 正式成为了福建省莆田一中的一名高一成员 后来学校搞了选修 大家都很激动 因为自己的兴趣和特长能够得到发挥了(或者说能逃课或者看好多电影) 发现选修提供的选项中有好几 ...
- 告别我的OI生涯
本文章写于2008年12月15日. 随着2008noip的结束,我也结束了我的OI生涯. 信息竞赛也许是从小到大让我最最努力的一件事.我记得参加2006noip初赛前,每天中午为了上信息课都吃不上中午 ...
- 收集一些关于OI/ACM的奇怪的东西……
一.代码: 1.求逆元(原理貌似就是拓展欧几里得,要求MOD是素数): int inv(int a) { if(a == 1) return 1; return ((MOD - MOD / a) * ...
- 继续OI
NOIP2016于2016.11.20日12:00正式结束. 我作为oi的生涯 或许会结束? 或者继续? 然而前途依然迷茫,我是否应该继?或是放弃? 距离省选还有3~4个月,我该何去何从? 虽然已经经 ...
- 再见OI
NOIP2016终章 自己弱还脑残加手残 再见OI 你好高考 你好明天 "没有泪水的日子会轻松很多 但我的心还是会痛" ------------------------------ ...
- 【线段树套平衡树】【pb_ds】bzoj3196 Tyvj 1730 二逼平衡树
线段树套pb_ds里的平衡树,在洛谷OJ上测试,后三个测试点TLE #include<cstdio> #include<algorithm> #include<ext/p ...
随机推荐
- Python 按分类样本数占比生成并随机获取样本数据
按分类样本数占比生成并随机获取样本数据 By:授客 QQ:1033553122 开发环境 win 10 python 3.6.5 需求 已知样本分类,每种分类的样本占比数,及样本总数,需要随机获取这些 ...
- CF1951
A link 这个题就是讨论. 首先,如果没有\(1\)就一定可以. 如果有\(1\). 如果长度为\(2\)一定不行. \(1\)的个数为奇数不行. 如果为偶数 有一个小点:如果是\(2\)个\(1 ...
- Golang 高性能 Websocket 库 gws 使用与设计(一)
前言 大家好这里是,白泽,这期分析一下 golang 开源高性能 websocket 库 gws. 视频讲解请关注B站:白泽talk 介绍 gws:https://github.com/lxzan/g ...
- 【DataBase】SQL优化案例:其一
原始SQL: 这里想做的事情就是查询一周的一个计算值 可以理解为报表的那种 主表 t_wechat_clue 生产库上200万数据量 然后需要联表一些限制条件 SELECT IFNULL(SUM((C ...
- 【MySQL】29 索引
MySQL是一个关系型的数据库 使用标准的SQL数据格语言格式 支持大型数据库,处理千万级别的记录数据 允许多系统运行,支持多种编程语言连接 最重要的一点是MySQL允许定制,采用GPL协议,允许修改 ...
- windows11系统NVIDIA显卡驱动自动升级导致2070 Super显卡失效 —— 552.22版本自动升级到560.70版本后2070 Super型号显卡停止工作
操作系统 Windows11,旧版本显卡驱动是552.22,由于安装的是NVIDIA Geforce Experience后显卡驱动自动升级到560.77版本,然后显卡不再工作. 重新安装显卡驱动56 ...
- 为什么模具设计人员中很多人不喜欢使用CAE仿真软件呢? —— 以汽车制造领域为例
参考论文: 通常 的有限元分析软件在后处理 上只是将计算结果 以图形或表格的 方式显 示 在屏幕上 , 并没有对计算结果进行系统的整理 和提炼 . 在基于有 限元 计算结果 的反复设计过程 中, 设计 ...
- NVIDIA公司在实体机器人上的第一步尝试 —— Nova Cater AMR —— 九号机器人与英伟达联合开发的自动驾驶研发平台“Nova Cater AMR(简称:NC)”
相关: https://www.leiphone.com/category/robot/Hgy9i8azqGncESIB.html Nova Cater AMR是一款仓储运货机器人,可以应用在仓储物流 ...
- 【转载】 Py之cupy:cupy的简介、安装、使用方法之详细攻略
版权声明:本文为CSDN博主「一个处女座的程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/qq_4118 ...
- jQuery Eazyui的学习和使用(一)
工作需要,需要学习使用据说非常简单好用的前端框架-----Eazyui 先看看简介吧:"jQuery EasyUI 是一个基于 jQuery 的框架,集成了各种用户界面插件.jQuery E ...