P3378 【模板】堆

题目描述

给定一个数列,初始为空,请支持下面三种操作:

给定一个整数 x,请将 x 加入到数列中。

输出数列中最小的数。

删除数列中最小的数(如果有多个数最小,只删除 1 个)。

输入格式

  • 第一行是一个整数,表示操作的次数 n。

  • 接下来 n 行,每行表示一次操作。每行首先有一个整数 op 表示操作类型。

  1. 若 op = 1,则后面有一个整数x,表示要将 x 加入数列。

  2. 若op=2,则表示要求输出数列中的最小数。

  3. 若 op = 3,则表示删除数列中的最小数。如果有多个数最小,只删除1 个。

输出格式

  • 对于每个操作 2,输出一行一个整数表示答案。

输入输出样例

输入

5
1 2
1 5
2
3
2

输出

2
5

说明/提示

数据规模与约定

  • 对于 30% 的数据,保证 n≤15。
  • 对于 70% 的数据,保证 n≤10^4-。
  • 对于 100% 的数据,保证 1≤n≤10^6,1≤x<2^31,op∈{1,2,3}。

思路1

这道题是堆的模板题目,我们可以用堆来做这题

但是直接用堆来做的话会超时,建议用思路2来做

代码

#include<bits/stdc++.h>
#pragma GCC optimize(100)
using namespace std;
int dui[100001];
int n=0;
void downadjust(int low,int high){
int i=low,j=i*2;
while(j<=high){
if(j+1<=high&&dui[j+1]>dui[j]){
j=j+1;
}
if(dui[j]>dui[i]){
swap(dui[j],dui[i]);
i=j;
j=i*2;
}else{
break;
}
}
}
void build(){
for(int i=n/2;i>=1;i--){
downadjust(i,n);
}
}
void deletetop(){
dui[1]=dui[n--];
downadjust(1,n);
}
void duisort(){
build();
for(int i=n;i>=1;i--){
swap(dui[i],dui[1]);
downadjust(1,i-1);
}
}
void upadjust(int low,int high){
int i=high,j=i/2;
while(j>=low){
if(dui[j]<dui[i]){
swap(dui[j],dui[i]);
i=j;
j=i/2;
}else{
break;
}
}
}
void deleteany(int x){
dui[x]=dui[--n];
upadjust(1,x);
downadjust(x,n);
}
void insert(int i){
dui[++n]=i;
upadjust(1,n);
}
int main(){
ios::sync_with_stdio(false);
int t;
cin>>t;
int a,b;
int vis=0;
for(int i=1;i<=t;i++){
cin>>a;
vis=0;
if(a==1){
cin>>b;
insert(b);
}
else if(a==2){
duisort();
vis=1;
cout<<dui[1]<<endl;
}
else{
duisort();
deletetop();
}
}
return 0;
}

思路2

这道题我们还可以直接用优先队列,来模拟栈(值小的优先级大,所以要重定义priority_queue)

priority_queue<int,vector<int>,greater<int> >q;

代码

#include<bits/stdc++.h>
using namespace std;
int main(){
priority_queue<int,vector<int>,greater<int> >q;
int n;
cin>>n;
int a,b;
for(int i=1;i<=n;i++){
cin>>a;
if(a==1){
cin>>b;
q.push(b);
}
else if(a==2){
cout<<q.top()<<endl;
}
else{
q.pop();
}
}
return 0;
}

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

  1. P3378 堆の模板

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

  2. 洛谷P3378 【模板】堆

    P3378 [模板]堆 160通过 275提交 题目提供者HansBug 标签 难度普及- 提交  讨论  题解 最新讨论 经实际测试 堆的数组开3000- 题目有个问题 为什么这个按课本堆标准打的- ...

  3. P3378 【模板】堆 (内含左偏树实现)

    P3378 [模板]堆 题解 其实就是一个小根堆啦,STL就可以解决,但是拥有闲情雅致的我学习了Jelly_Goat的左偏树,增加了代码长度,妙啊 Solution 1 STL STL 里面prior ...

  4. 可并堆模板题-mergeable heap

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

  5. 【luogu P3378 堆】 模板

    题目链接:https://www.luogu.org/problemnew/show/P3378 是堆的模板...我懒,STL da fa is good #include <iostream& ...

  6. Luogu P3378 【模板】堆

    ((^ 0.0 ^)    )~ 堆是一个完全二叉树,对于小根堆,所有父节点<=子节点,下标就和线段树是一样的 在STL里就是优先队列 只有堆顶元素可以操作(询问或弹出). 加入新元素时x,he ...

  7. 堆模板(pascal)洛谷P3378

    题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...

  8. 洛谷 P3378 【模板】堆

    如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含 ...

  9. P3378 堆【模板】 洛谷

    https://www.luogu.org/problem/show?pid=3378 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 ...

随机推荐

  1. 深入理解SVM,软间隔与对偶问题

    今天是机器学习专题的第33篇文章,我们继续来聊聊SVM模型. 在上一篇文章当中我们推到了SVM模型在线性可分的问题中的公式推导,我们最后得到的结论是一个带有不等式的二次项: \[\left\{\beg ...

  2. Auto Generate Reflection Information for C++

    https://www.reddit.com/r/gamedev/comments/3lh0ba/using_clang_to_generate_c_reflection_data/ https:// ...

  3. C++——百分率

    代码如下: #include <iostream> #include <cmath> using namespace std; int main() { double a; c ...

  4. Git 实用操作:撤销 Commit 提交

    有的时候,改完代码提交 commit 后发现写得实在太烂了,连自己的都看不下去,与其修改它还不如丢弃重写.怎么操作呢? 使用 reset 撤销 如果是最近提交的 commit 要丢弃重写可以用 res ...

  5. HTML -- 表单元素1

    HTML 表单用于搜集不同类型的用户输入. 一.<form> 标签 <form> 标签用于为用户输入创建 HTML 表单. 表单能够包含 input 元素,比如文本字段.复选框 ...

  6. 吴恩达《深度学习》-第一门课 (Neural Networks and Deep Learning)-第三周:浅层神经网络(Shallow neural networks) -课程笔记

    第三周:浅层神经网络(Shallow neural networks) 3.1 神经网络概述(Neural Network Overview) 使用符号$ ^{[

  7. centos7安装PHP7的redis扩展

    前言: 在本篇博客中,我将给大家介绍如何在Centos7上安装PHP-Redis扩展,关于如何在Centos上安装redis的,可以参考另外一篇博客:Centos7安装redis 想要在php中操作r ...

  8. [LeetCode]198. 打家劫舍(DP)

    题目 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警. 给定一个 ...

  9. Docker端口映射及创建镜像演示(二)

    Docker暴露容器方法 第一种:将容器中的一个端口映射成宿主机中的一个随机端口 第二种:将容器中的一个端口映射成宿主机中的一个端口 第三种:将容器中的一个端口映射成宿主机中的一个特定网卡上的随机端口 ...

  10. P4742 【[Wind Festival]Running In The Sky】

    相信来做这道题的人肯定都学过\(Tarjan\)缩点吧,如果没有建议先去做P3387 [模板]缩点,如果你忘了,建议也去看看 满足上面要求后,你会惊奇发现,这两道题基本一样,唯一的差别就是这道题需要记 ...