堆优化dijkstra基础、模拟堆
创始人
2025-05-30 18:23:15
0

例题及代码模板

模拟堆

一、题目描述
维护一个集合,初始时集合为空,支持如下几种操作:

I x,插入一个数 x ;
PM,输出当前集合中的最小值;
DM,删除当前集合中的最小值(数据保证此时的最小值唯一);
D k,删除第 k 个插入的数;
C k x,修改第 k 个插入的数,将其变为 x ;
现在要进行 N 次操作,对于所有第 2 个操作,输出当前集合的最小值。

输入格式
第一行包含整数 N 。

接下来 N 行,每行包含一个操作指令,操作指令为 I x,PM,DM,D k 或 C k x 中的一种。

输出格式
对于每个输出指令 PM,输出一个结果,表示当前集合中的最小值。

每个结果占一行。

数据范围
1 ≤ N ≤ 10^5 ,−10^9 ≤ x ≤ 10^9  
数据保证合法。

输入样例:

8
I -10
PM
I -10
D 1
C 2 8
I 6
PM
DM
输出样例:

-10
6

 

#include 
#include 
#include 
using namespace std;
const int N = 100010;
int n,m,hp[N],ph[N];
//ph[k]存的是第k个插入的数在堆中的下标是什么
//hp[k]堆里面的某一个点是第几个插入的点
int h[N],size;
void heap_swap(int a, int b) {//a和b是下标swap(ph[hp[a]],ph[hp[b]]);//交换ph数组中记录的下标;通过hp获得是第几次插入的,通过第k次插入的获得某一元素在堆中的下标//因为ph是通过第k次为下标存储的,所以我们想修改ph数组的值,必须找到第k次//而hp是通过下标存储k的值的,所以先通过已知的下标找到k的值,再交换ph里面的值swap(hp[a],hp[b]);//交换插入的顺序,即存储的k的值swap(h[a],h[b]);//交换两个元素的值
}
void down(int u) {int t = u;//使用t记录根节点的值//让根节点分别和左右子节点进行对比if(u*2<=size&&h[u*2]h[u]) {heap_swap(u/2,u);u/=2;}
}
int main() {int n,m=0;scanf("%d",&n);while(n--) {char op[10];int k,x;scanf("%s",&op);if(!strcmp(op,"I")) {scanf("%d",&x);size++;m++;ph[m]=size;//记录第m次插入的元素在堆里面的下标hp[size]=m;//记录当前下标的元素在ph里面的位置,即当前元素是第m个插入的h[size]=x;//插入元素up(size);//调整堆} else if(!strcmp(op,"PM"))//输出最小值printf("%d\n",h[1]);else if(!strcmp(op,"DM")) {//删除最小值heap_swap(1,size);size--;down(1);} else if(!strcmp(op,"D")) {//删除第k个插入的元素scanf("%d",&k);k=ph[k];//第k个元素所存储的下标heap_swap(k,size);//通过第k个元素的下标将第k个元素与最后一个元素进行交换size--;//删除第k个插入的元素down(k),up(k);//两个操作最多只会执行一个操作} else {scanf("%d%d",&k,&x);k=ph[k];//找到第k次插入的元素的存储下标h[k]=x;//通过下标修改第k次插入元素的值down(k),up(k);//维护堆}}return 0;
}

 

相关内容

热门资讯

HCIE-Cloud Comp... 我是它的题目,要就来先看看我咯 确认密码是否正确 错误出现场景:键盘大小键输入错误、手抖写错 操作:...
滑步处理 - 让动画脚步和移位... 游戏制作中,通常的做法是让动画播放跑步或者其他移动动画,然后让刚体跟着移...
春节祝福语41条 2021年精选春节祝福语锦集41条  让我高歌一曲海皮呗时特吐有,海皮呗时特吐有,海皮呗时特吐有,海...
“明天”的我们散文随笔 “明天”的我们散文随笔  现在的我们成年了,我只是希望,我在今天的每一丝微笑都比明天要灿烂,我的每一...
春节拜年祝福语短信 2020年精选春节拜年祝福语短信集合38条  愿你是清新的海风,鼓起白色的船帆;愿你是坚固的大船,剪...
大班教育随笔 大班教育随笔(通用20篇)  无论是身处学校还是步入社会,大家都写过随笔吗?随笔是过去社会较为流行的...
二维码及条形码智能检测软件(P... 摘要:二维码及条形码智能检测软件用于检测常用条形码和二维码,对其位置进行...
伤感心情随笔 伤感心情随笔合集15篇  无论是身处学校还是步入社会,大家都写过随笔吗?随笔,或讲述文化知识,或发表...
大班区域活动随笔   开展区域活动的意义,就是培养孩子的发散思维和提高思考能力。那么大班区域活动随笔会写些什么呢?下面...
小学语文教师随笔3篇   导读:随笔,顾名思义:随笔一记,是散文的一个分支,是议论文的一个变体,兼有议论和抒情两种特性,通...
中班美术教育随笔   中班美术教育随笔(一)  对于刚上中班的孩子,绘画的能力还不是很强,我决定先来一次涂色巩固的练习...
小程序和Vue写法的区别 小程序和Vue写法的区别主要有以下几点: 语法不同:小程序使用的是WX...
男女性别识别【目标检测+图像分... 前言 前几天朋友让我做一个男女性别识别,识别图中是否有人,是男性还是女性...
生活随笔:感恩节有感 生活随笔:感恩节有感  生活随笔:感恩节有感  今天是11月25日,也是201x年的感恩节,不知道怎...
爱情优美散文随笔   有一些人,无论爱情如何待她,总能用释怀的心把爱情记录下来,以下是小编整理的爱情优美散文随笔,欢迎...
随笔:中秋节里忆童年 随笔:中秋节里忆童年  中秋如歌,轻吟浅唱。是无声岁月里落下的温柔甜美的一曲,是时光书简上清浅悠扬的...
暑假生活随笔800字 暑假生活随笔800字范文推荐,大家可以借鉴的哈,欢迎你的参考。希望能够帮助到你。篇一:令人期盼已久的...
ProxySQL集成MHA的单... 说明:MHA为主从复制的MySQL集群提供了主节点故障转移的功能,但是如...
职业生涯感悟随笔   我们从事工作这么久,怎么才能知道自己做的怎么样呢?这个时候就需要你多做一些职业上的感悟,下面就由...
我的开学第一天随笔日记的 我的开学第一天随笔日记的范本  引导语:开学,汉语解释有开设学校、启作学者、学期开始三个释义。但在日...