P3378 堆(模板)
P3378 【模板】堆
题目描述
给定一个数列,初始为空,请支持下面三种操作:
给定一个整数 x,请将 x 加入到数列中。
输出数列中最小的数。
删除数列中最小的数(如果有多个数最小,只删除 1 个)。
输入格式
第一行是一个整数,表示操作的次数 n。
接下来 n 行,每行表示一次操作。每行首先有一个整数 op 表示操作类型。
若 op = 1,则后面有一个整数x,表示要将 x 加入数列。
若op=2,则表示要求输出数列中的最小数。
若 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 堆(模板)的更多相关文章
- P3378 堆の模板
如果不是可并堆/带修堆/卡常题,一般都用优先队列实现. 很多O(nlogn)过不了的题都可以用蚯蚓的套路来实现!!! 优先队列带修用延迟删除法. 堆,可以简单的用优先队列来实现,也可以自己手打. #i ...
- 洛谷P3378 【模板】堆
P3378 [模板]堆 160通过 275提交 题目提供者HansBug 标签 难度普及- 提交 讨论 题解 最新讨论 经实际测试 堆的数组开3000- 题目有个问题 为什么这个按课本堆标准打的- ...
- P3378 【模板】堆 (内含左偏树实现)
P3378 [模板]堆 题解 其实就是一个小根堆啦,STL就可以解决,但是拥有闲情雅致的我学习了Jelly_Goat的左偏树,增加了代码长度,妙啊 Solution 1 STL STL 里面prior ...
- 可并堆模板题-mergeable heap
Description 有n个点,第i个点标号为i,有两种操作:0 x y 表示把x所在堆和y所在堆合并.1 x 表示询问x所在堆的最小权. Input 第一行两个整数n,m,表示有n个点m个操作. ...
- 【luogu P3378 堆】 模板
题目链接:https://www.luogu.org/problemnew/show/P3378 是堆的模板...我懒,STL da fa is good #include <iostream& ...
- Luogu P3378 【模板】堆
((^ 0.0 ^) )~ 堆是一个完全二叉树,对于小根堆,所有父节点<=子节点,下标就和线段树是一样的 在STL里就是优先队列 只有堆顶元素可以操作(询问或弹出). 加入新元素时x,he ...
- 堆模板(pascal)洛谷P3378
题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: ...
- 洛谷 P3378 【模板】堆
如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 输出该小根堆内的最小数 操作3: 3 删除该小根堆内的最小数 输入输出格式 输入格式: 第一行包含 ...
- P3378 堆【模板】 洛谷
https://www.luogu.org/problem/show?pid=3378 题目描述 如题,初始小根堆为空,我们需要支持以下3种操作: 操作1: 1 x 表示将x插入到堆中 操作2: 2 ...
随机推荐
- redis数据库基础篇
一.Redis介绍 Redis 是一个高性能的key-value数据格式的内存缓存,NoSQL数据库.NOSQL:not only sql,泛指非关系型数据库.关系型数据库: (mysql, orac ...
- 【Android】AndroidStudio(Eclipse)如何使用天天模拟器进行调试apk应用。
作者:程序员小冰,GitHub主页:https://github.com/QQ986945193 新浪微博:http://weibo.com/mcxiaobing 大家都知道,我们这些Android开 ...
- 发生错误 1069 sqlserver
---------------------------SQL Server 服务管理器---------------------------发生错误 1069 - (由于登录失败而无法启动服务.),此 ...
- LC算法技巧总结(二):双指针和滑动窗口技巧
我把双指针技巧再分为两类,一类是「快慢指针」,一类是「左右指针」.前者解决主要解决链表中的问题,比如典型的判定链表中是否包含环:后者主要解决数组(或者字符串)中的问题,比如二分查找. 一.快慢指针的常 ...
- Linux:用tar解压文件出现错误Not found in archive
问题:用tar解压文件出现错误Not found in archive 解决办法:加上-C参数 tar -zxvf ZenTaoPMS.8.1.3.zbox_64.gz -C /usr 因为压缩文件 ...
- 关于在异步操作中访问React事件对象的小问题
最近撸React的代码时踩了个关于事件处理的坑,场景如下:在监听某个元素上会频繁触发的事件时,我们往往会对该事件的回调函数进行防抖的处理:防抖的包装函数大致长这样: debounce = (fn, d ...
- PicGo软件搭配gitee实现图床
1.安装PicGo软件,并配置gitee 1.1安装picGo picGo 安装gitee-uploader 插件 官网下载地址如下:最新版本 可以自行选择版本进行下载,这里我选择了最新的版本进行下载 ...
- CSS 简介,学习 CSS 必看
CSS 表示的是层叠样式表,学习 CSS 之前我们必须要掌握 HTML 和 XHTML 概述 CSS 指层叠样式表 (Cascading Style Sheets) 样式定义如何显示 HTML 元素 ...
- Charles抓包工具的用途及应用
Charles抓包工具的用途: 排查问题,测试异常情况 注意:Charles不能直接抓https请求的包,需要用https://www.jianshu.com/p/ec0a38d9a8cf这个方法去配 ...
- ulimit 的认识
原文出自 通过 ulimit 改善系统性能 概述 系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时 ...