STL 堆
测试题目:洛谷P3378 【模板】堆
插入,删除,取最小
方法0:STL 优先队列
1198ms
#include<iostream>
#include<cstdio>
#include<queue>
#include<vector>
using namespace std;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,op;
priority_queue<int, vector<int>, greater<int> > q;
int main(){
//freopen("in.txt","r",stdin);
n=read();
for(int i=;i<=n;i++){
op=read();
if(op==) q.push(read());
else if(op==) printf("%d\n",q.top());
else q.pop();
}
}
方法1:algorithm库 heap系列函数
520ms 这个数字.....
make_heap(begin,end,cmp) 建堆 前闭后开 cmp定义<运算,可选 注意同样是默认大根堆
push_heap(begin,end,cmp) 插入 前闭后开 插入最后一个元素
pop_heap(begin,end,cmp) 删除 把堆顶元素放到最后一个位置
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
typedef long long ll;
const int N=1e6+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,op,x;
int a[N],len=;
inline bool cmp(int a,int b){return a>b;}
int main(){
n=read();
for(int i=;i<=n;i++){
op=read();
if(op==){
a[++len]=read();
push_heap(a+,a++len,cmp);
}else if(op==) printf("%d\n",a[]);
else pop_heap(a+,a++len,cmp),len--;
}
}
方法2:pb_ds库
据说竞赛可用
#include <ext/pb_ds/priority_queue.hpp>
using namespace __gnu_pbds;
支持配对堆(pairing_heap)、二叉堆(binary_heap)、二项堆(binomial_heap)、冗余计数二项堆(redundant-counter binomial_heap,没找到通用译名,故自行翻译)、经改良的斐波那契堆(thin_heap)
使用方法:__gnu_pbds::priority_queue<int,greater<int>,pairing_heap_tag> q; 第三个参数换成想用的名称就行了,默认配对堆
支持join操作,然而本文不考虑
pairing_heap_tag 428ms
binomial_heap 544ms
rc_binomial_heap 610ms
thin_heap_tag 790ms
结合WC课件中的测试,用默认的pairing就好了
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <ext/pb_ds/priority_queue.hpp>
using namespace std;
using namespace __gnu_pbds;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,op,x;
__gnu_pbds::priority_queue<int,greater<int> > q;
int main(){
n=read();
for(int i=;i<=n;i++){
op=read();
if(op==) q.push(read());
else if(op==) printf("%d\n",q.top());
else q.pop();
}
}
STL 堆的更多相关文章
- C++ STL堆操作
/* STL 最大堆.最小堆的应用 */ #include <iostream> #include <vector> #include <algorithm> // ...
- STL 堆的使用
本来是要写leetcode上的merge k sorted lists那道题目,这个题目我还是很熟悉的,毕竟是看过算法导论的人,但是写的过程中对堆的维护代码还是挺多的,所以我想到了STL中的堆.下面就 ...
- 堆以及stl堆的使用
概念 性质: 1.堆是一颗完全二叉树,用数组实现. 2.堆中存储数据的数据是局部有序的. 最大堆:1.任意一个结点存储的值都大于或等于其任意一个子结点中存储的值. 2.根结点存储着该树 ...
- bzoj1293: [SCOI2009]生日礼物(stl堆)
1293: [SCOI2009]生日礼物 题目:传送门 题解: 据说这道题乱搞随便就水过了 本蒟蒻想到了一个用堆的水法(还专门学了学queue): 如果把每一种颜色的下一个位置都记录一下的话,一开始就 ...
- dijkstra STL 堆优化
Code: #include<iostream> #include<algorithm> #include<vector> #include<queue> ...
- 【STL学习】堆相关算法详解与C++编程实现(Heap)
转自:https://blog.csdn.net/xiajun07061225/article/details/8553808 堆简介 堆并不是STL的组件,但是经常充当着底层实现结构.比如优先级 ...
- STL 最大堆与最小堆
在第一场CCCC选拔赛上,有一关于系统调度的水题.利用优先队列很容易AC. // 由于比赛时花费了不少时间研究如何定义priority_queue的比较函数,决心把STL熟练掌握... Queue 首 ...
- 堆的基础题目学习(EPI)
堆的应用范围也比较广泛,经常游走在各种面试题目之前,不论算法设计的题目还是海量数据处理的题目,经常能看到这种数据结构的身影.堆其实就是一个完全二叉树的结构,经常利用数组来实现.包含最大堆和最小堆两种. ...
- STL之heap与优先级队列Priority Queue详解
一.heap heap并不属于STL容器组件,它分为 max heap 和min heap,在缺省情况下,max-heap是优先队列(priority queue)的底层实现机制.而这个实现机制中的m ...
随机推荐
- B/S工作原理
B/S疑问 先对比C/S,在C/S中我们开发时怎么做的,是不是这样:拖控件,写方法,所有的功能基本就是这样,就像我们的机房收费系统,C/S学习完之后,我们开始B/S学习,这里我们接触的是ASP.NET ...
- MySQL使用if判断
select *,if(sva=1,"男","女") as ssva from taname where sva<>"" 12. ...
- Java中,关于字符串类型、随机验证码、 时间类型
一.字符串类型:String类型 定义一个字符串 String a="Hello World"; String b= new String ("Hello World&q ...
- Java的关键字与标识符
Java作为一门编程语言,与其他语言一样,有字符集.标识符.和关键字.变量.常量.语句等编程语言的基本要素. 1.关键字 abstract boolean break byte case catch ...
- SSH整合(struts2.3.24+hibernate3.6.10+spring4.3.2+mysql5.5+myeclipse8.5+tomcat6+jdk1.6)
终于开始了ssh的整合,虽然现在比较推崇的是,ssm(springmvc+spring+mybatis)这种框架搭配确实比ssh有吸引力,因为一方面springmvc本身就是遵循spring标准,所以 ...
- Verilog学习笔记基本语法篇(十一)········ 常用系统函数
1)系统任务:$monitor 格式: $monitor(p1,p2,p3...pn); $monitor; $monitoron; $monitoroff; 任务$monitor提供了监控输出列 ...
- [deviceone开发]-do_Http组件示例
一.简介 详细展示do_Http组件的使用,包括get,post,upload,form,download的http请求.另外还附加了一个Java实现的后台程序作为参考.初学者强烈推荐. 二.效果图 ...
- Objective-C 关键字:retain, assgin, copy, readonly,atomic,nonatomic
声明式属性的使用:声明式属性叫编译期语法 @property(retain,nonatomic)Some *s; @property(参数一,参数二)Some *s; 参数1:retain:修饰引用( ...
- 自己实现苹果安装app动画
最近在学习CALayer相关动画,然后某一天突然发现苹果安装app这动画就很不错啊,所以就想自己实现下. 具体效果如图: 还是不试不知道一试吓一跳啊,这看上去简单的动画没我想象的那么简单. 首先这个动 ...
- Android数据存储方式--SharedPreferences
Android数据存储方式有如下四种:SharedPreferences.存储到文件.SQLite数据库.内容提供者(Content provider).存储到网络服务器. 本文主要介绍一下Share ...