基于STL的堆略解
什么是STL
以下内容摘自这儿。
STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
堆
堆 是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:
- 堆中某个节点的值总是不大于或不小于其父节点的值;
- 堆总是一棵完全二叉树。
将根节点最大的堆叫做最大堆或 大根堆,根节点最小的堆叫做最小堆或 小根堆。常见的堆有 二叉堆、斐波那契堆等。
大根堆的STL实现
以下代码在 Dev-C++ 5.7.1 中可以编译通过。
- 声明一个存储 int类型的大根堆hep;
priority_queue<int> hep;
- 声明一个存储 int类型的小根堆hep;
priority_queue<int,vector<int>,greator<int> >
注意:greator<int> 和右边的 > 之间的空格不可略去。
- 声明堆需要加载头文件
#include<queue>
#include<algorithm>
使用 std 名字空间
using namespace std;
使用STL的缺点,就是常数大。
下面我们以 luoguP3378\text{luoguP3378}luoguP3378 为例,讲解 priority_queue 的调用方法。
题目描述 luoguP3378\text{luoguP3378}luoguP3378
你需要写一个数据结构,支持以下操作:
- 插入一个数;
- 询问当前最小的数;
- 压出当前最小的数。
操作次数 N≤106N\leq 10^6N≤106。
Solution 3378\text{Solution 3378}Solution 3378
Tips:另一种实现小根堆的做法是,存储原数的相反数,查询时再取反输出。详见代码。
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#define reg register
using namespace std;
priority_queue<int> hep;
int n;
int s1,s2;
int main(){
	scanf("%d",&n);
	for(reg int i=1;i<=n;++i){
		scanf("%d",&s1);
		switch(s1){
			case 1:
				scanf("%d",&s2);
				hep.push(-s2);	//将新元素的相反数压入堆
				break;
			case 2:
				printf("%d\n",-hep.top());	//取出堆顶元素
				break;
			case 3:
				hep.pop();	//弹出堆顶元素
				break;
			default:
				break;
		}
	}
}
基于STL的堆略解的更多相关文章
- 基于STL的队列略解
		什么是STL 以下内容摘自这儿. STL(Standard Template Library,标准模板库)是惠普实验室开发的一系列软件的统称.它是由Alexander Stepanov.Meng Le ... 
- STL的vector略解
		本文部分内容参考于这儿. vector 的基础知识,上文已经阐述地很详尽了.笔者谨给出 vector 的声明及其常用函数. 代码抬头需包含 #include<vector> using n ... 
- 数据结构图文解析之:二叉堆详解及C++模板实现
		0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ... 
- STL bind1st bind2nd详解
		STL bind1st bind2nd详解 先不要被吓到,其实这两个配接器很简单.首先,他们都在头文件<functional>中定义.其次,bind就是绑定的意思,而1st就代表fir ... 
- 基于模型的特征选择详解 (Embedded & Wrapper)
		目录 基于模型的特征选择详解 (Embedded & Wrapper) 1. 线性模型和正则化(Embedded方式) 2. 基于树模型的特征选择(Embedded方式) 3. 顶层特征选择算 ... 
- io流函数略解(java_input流)[二]
		背景 在写这篇随笔之前,已经写了io流函数略解(java_File)(一),主要是总结了File的一些操作,以及一些源码介绍. 在Io实际应用中,实际上运用在如果会操作File,实际上很难写出一点能实 ... 
- C++ STL bitset 容器详解
		C++ STL bitset 容器详解 本篇随笔讲解\(C++STL\)中\(bitset\)容器的用法及常见使用技巧. \(bitset\)容器概论 \(bitset\)容器其实就是个\(01\)串 ... 
- C++ 基于STL的演讲比赛流程管理系统(sort算法+小型算法(accumulate)+内建函数对象+string字符串拼接+字符串截取+多个容器基础操作+与用户交互+文件的读写+保存+重建+整体文件数据的清空)
		1 /* 2 比赛规则: 3 学校举行一演讲比赛,共12个人参加,比赛两轮,第一轮为淘汰赛 第二轮为决赛 4 每名选手都有对应的编号:如10001~10012 5 比赛方式:分组比赛 每组6人 6 第 ... 
- jvm栈和堆详解
		Java把内存分成两种,一种叫做栈内存,一种叫做堆内存 在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配.当在一段代码块中定义一个变量时,java就在栈中为这个变量分配内存空间 ... 
随机推荐
- Python中使用moviepy进行视频分割
			场景 moviepy官网: https://pypi.org/project/moviepy/ 是一个用于视频编辑的Python库:切割.连接.标题插入.视频合成.非线性编辑,视频处理和定制效果的创建 ... 
- FJUT2019暑假周赛一题解
			A.排队问题*-* 题意就是有长度为L的序列,每位的取值可以是'f'或者'm',问不包含'fff'和'fmf'的个数. 打表找规律 不难找出递推公式为F[n] = F[n-1] + F[n-3] + ... 
- [VB.NET Tips]字符串转换为日期
			有些字符串需要转换成日期,或者整型转换为日期,可以参考如下思路: Dim result As Date Dim source As String = "20190515" resu ... 
- Spring boot使用log4j打印日志
			先将maven中spring-boot-starter的日志spring-boot-starter-logging去掉 <dependency> <groupId>org.sp ... 
- 第六届蓝桥杯java b组第一题
			第一题 三角形面积 图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. 填空答案 28 没什么好说的 第一题很水 估计就是为了增 ... 
- 搭建大数据开发环境-Hadoop篇
			前期准备 操作系统 hadoop目前对linux操作系统支持是最好的,可以部署2000个节点的服务器集群:在hadoop2.2以后,开始支持windows操作系统,但是兼容性没有linux好.因此,建 ... 
- web前端开发面试题(附答案)-3
			1.用纯css创建一个三角形的原理: .demo{ width:0; height: 0; border: 5px solid transparent; border-left-color: red; ... 
- SpringBootSecurity学习(05)网页版登录内存中配置默认用户
			默认用户 前面的例子中我们使用的都是配置文件中配置好的默认用户: 除了可以配置账号密码,还可以在配置文件中配置角色: 这个角色是后面实现权限过滤的重要内容,后面会重点讨论. 在内存中配置默认用户 这样 ... 
- Scrapy项目 - 数据简析 - 实现腾讯网站社会招聘信息爬取的爬虫设计
			一.数据分析截图 本例实验,使用Weka 3.7对腾讯招聘官网中网页上所罗列的招聘信息,如:其中的职位名称.链接.职位类别.人数.地点和发布时间等信息进行数据分析,详见如下图: 图1-1 Weka ... 
- 深度汉化GCompris-qt,免费的幼儿识字软件
			1 需求 因为有个小孩上幼儿园了,想开始教他一些汉语拼音和基本的汉字,但通过一书本和卡片又有些枯燥乏味,于上就上网搜索一些辅助认字的应用,还购买了悟空识字APP,在用的过程中发现他设置了很严格的关卡, ... 
