题目描述

如题,初始小根堆为空,我们需要支持以下3种操作:

操作1: 1 x 表示将x插入到堆中

操作2: 2 输出该小根堆内的最小数

操作3: 3 删除该小根堆内的最小数

输入输出格式

输入格式:

第一行包含一个整数N,表示操作的个数

接下来N行,每行包含1个或2个正整数,表示三种操作,格式如下:

操作1: 1 x

操作2: 2

操作3: 3

输出格式:

包含若干行正整数,每行依次对应一个操作2的结果。

输入输出样例

输入样例#1: 复制

5
1 2
1 5
2
3
2
输出样例#1: 复制

2
5

说明

时空限制:1000ms,128M

数据规模:

对于30%的数据:N<=15

对于70%的数据:N<=10000

对于100%的数据:N<=1000000(注意是6个0。。。不过不要害怕,经过编者实测,堆是可以AC的)

样例说明:

故输出为2、5

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。--分割线

堆,这是个比较令人熟悉的容器

ta无非是维持一棵具有单调性的树(从小到大 OR 从大到小)

所以它可以将一次搜索的时杂变成O(log n);

具体看代码吧

这里是stl的版本:(其实那后面那个手写版本是有问题的,可我太弱,目前还没调出来)

#include<bits/stdc++.h>
using namespace std; //priority_queue<int> q 大根堆
priority_queue<int, vector<int>, greater<int> > q;//小根堆 (<int>后要加‘ ’)
/*
q.top()//取得堆顶元素,并不会弹出
q.pop()//弹出堆顶元素
q.push()//往堆里面插入一个元素
q.empty()//查询堆是否为空,为空则返回1否则返回0
q.size()//查询堆内元素数量
*/
int main(){
int n,x;
cin>>n;
while(n--){
int t;
scanf("%d",&t);
if(t==){
scanf("%d",&x);
q.push(x);
}
if(t==){
printf("%d\n",q.top());
}
if(t==){
q.pop();
}
}
}
/*情怀手写版
int l;//大小
int dui[1000005];
void up_dui(int i,bool z){
if(i==1||z==0){return;}
if(dui[i/2]>dui[i]) {
swap(dui[i/2],dui[i]);
}
else {
z=0;
}
up_dui(i/2,z);
}
void down_dui(int i){
if(i>=l) return;
if(dui[i*2]<dui[i]){
swap(dui[i*2],dui[i]);
down_dui(i*2);
return;
}
if(dui[i*2+1]<dui[i]){
swap(dui[i*2+1],dui[i]);
down_dui(i*2+1);
return;
}
}
void pushn(){
int x;
scanf("%d",&x);
++l;
dui[l]=x;
up_dui(l,1);
}
void popn(){
printf("%d\n",dui[1]);
}
void deleten(){
dui[1]=dui[l];
dui[l]=0;
--l;
down_dui(1);
}
int main(){
cin>>n;
while(n--){
int t;
scanf("%d",&t);
if(t==1){
pushn();
}
if(t==2){
popn();
}
if(t==3){
deleten();
}
}
} */

//跪求路过DALAO指导(QAQ)

堆模板(STL版)的更多相关文章

  1. 树、图、堆、STL(来自菜鸡的"炒鸡"干粮)

    树.图.堆.STL 图论基础 简单图: 没有自环,两个顶点之间最多只有一条边. 完全图: 一个简单图,每两个顶点之间都有一条边.一共有(n-1)*n/2条边. 二分图: 一个简单图,设G=(V,E)是 ...

  2. 可并堆模板题-mergeable heap

    Description 有n个点,第i个点标号为i,有两种操作:0 x y 表示把x所在堆和y所在堆合并.1 x 表示询问x所在堆的最小权. Input 第一行两个整数n,m,表示有n个点m个操作. ...

  3. 【块状链表】AutSky_JadeK的块状链表模板+总结(STL版)

    Part 1.块状链表.   定位 插入 删除 数组 O(1) O(n) O(n) 链表 O(n) O(1) O(1) 对于线性表的以上常见操作来说,数组和链表都无法有效地解决.但是,若我们将链表的每 ...

  4. 当堆遇到STL 代码焕发光芒

    来自度娘的释义,堆的含义大概是这样的: 感性理解: 堆(英语:heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.堆总是满足下列性质: 堆中某个节点的值总是不大于 ...

  5. 堆以及stl堆的使用

    概念 性质: 1.堆是一颗完全二叉树,用数组实现.    2.堆中存储数据的数据是局部有序的. 最大堆:1.任意一个结点存储的值都大于或等于其任意一个子结点中存储的值.      2.根结点存储着该树 ...

  6. chap1 C++泛型技术基础--模板 #STL

    0 缘起 有一点编程经验和积累,想系统的学习下STL,以前都是随意做的笔记,现在想着成主题的输出一下. 书的原型是ISBN:9787302421757 <C++泛型STL原理和应用>,是从 ...

  7. P3378 堆の模板

    如果不是可并堆/带修堆/卡常题,一般都用优先队列实现. 很多O(nlogn)过不了的题都可以用蚯蚓的套路来实现!!! 优先队列带修用延迟删除法. 堆,可以简单的用优先队列来实现,也可以自己手打. #i ...

  8. 字典树模板( 指针版 && 数组版 )

    模板 :  #include<string.h> #include<stdio.h> #include<malloc.h> #include<iostream ...

  9. calc 多项式计算 (STL版和非STL版) -SilverN

    计算(calc.cpp) [问题描述] 小明在你的帮助下,破密了Ferrari设的密码门,正要往前走,突然又出现了一个密码门,门上有一个算式,其中只有“(”,“)”,“0-9”,“+”,“-”,“*” ...

随机推荐

  1. Swagger解决你手写API接口文档的痛

    首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛     苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...

  2. Python 中用面向对象的思想处理网页翻页 (初级)

    第一种处理方法: class Pagenation(object): """ 处理分页相关的代码 """ def __init__(self ...

  3. zookeeper+springboot+dubbo简单实现

    第一步:在虚拟机中搭建zookeeper. 第二步:本地创建3个maven工程,分别为wxh-dubbo-api(对外暴露的接口),wxh-dubbo-provider(服务提供者,接口的具体实现), ...

  4. Vue + Mui

    概述 Vue套用Mui的外壳开发app项目,可以通过Mui的 manifest.json 文件添加权限 1.新建Mui项目 首先,新建一个空的Mui项目 window.location.href = ...

  5. 框架搭建与EF常用基类实现

    前两篇简单谈了一些.Net Core的优势以及机构设计的一些思路,这一篇开始,我们将从零开始搭建架构,底层我们将采用EF来访问数据库,所以这篇我们将贴一下EF常用操作的基类. 简单介绍下一些类库将要实 ...

  6. java常用类 比较器/system/math/big

    Java 比较器 自然排序:java.lang.Comparable 定制排序:java.util.Comparator 自然排序:java.lang.Comparable  Comparable接口 ...

  7. Vim 便捷 | 自己的Vim

    在.vimrc中安排自己的Vim set softtabstop=4 "将连续数量的空格视为一个制表符 set shiftwidth=4 "自动缩进所使用的空白数 set auto ...

  8. it公司比较

    1:本人西电通院2013届毕业硕士,根据今年找工作的情况以及身边同学的汇总,总结各大公司的待遇如下,吐血奉献给各位学弟学妹,公司比较全,你想去的公司不在这里面,基本上是无名小公司了:但无名小公司有时也 ...

  9. 创建基于OData的Web API - Knowledge Builder API, Part IV: Write Controller

    基于上一篇<创建基于OData的Web API - Knowledge Builder API, Part III:Write Model and Controller>,新创建的ODat ...

  10. java面试题-Java集合相关

    1. ArrayList 和 Vector 的区别 ArrayList和Vector底层实现原理都是一样得,都是使用数组方式存储数据 Vector是线程安全的,但是性能比ArrayList要低. Ar ...