数据结构(九)模拟堆---以题为例

news/发布时间2024/5/17 6:45:45

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

  1. I x,插入一个数 x
  2. PM,输出当前集合中的最小值;
  3. DM,删除当前集合中的最小值(数据保证此时的最小值唯一);
  4. D k,删除第 k 个插入的数;
  5. C k x,修改第 k 个插入的数,将其变为 x

现在要进行 N 次操作,对于所有第 2 个操作,输出当前集合的最小值。

输入格式

第一行包含整数 N

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

输出格式

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

每个结果占一行。

数据范围

1N105
109x109
数据保证合法。

输入样例:

8
I -10
PM
I -10
D 1
C 2 8
I 6
PM
DM

输出样例:

-10
6
#include<iostream>
#include<algorithm>
using namespace std;
const int N =100010;
int h[N],cnt,ph[N],hp[N];void heap_swap(int a,int b){swap(ph[hp[a]],ph[hp[b]]);swap(hp[a],hp[b]);swap(h[a],h[b]);
}void down(int u){int t =u;if(u*2<=cnt&&h[u*2]<h[t])t=u*2;if(u*2+1<=cnt&&h[u*2+1]<h[t])t=u*2+1;if(u!=t){heap_swap(u,t);down(t);}
}void up(int u){while(u/2&&h[u]<h[u/2]){heap_swap(u,u/2);u>>=1;}
}
int main(){int n,m=0;cin>>n;while(n--){string op;int k,x;cin>>op;if(op=="I"){cin>>x;cnt++;m++;ph[m]=cnt;hp[cnt]=m;h[cnt]=x;up(cnt);}else if(op=="PM"){cout<<h[1]<<endl;}else if(op=="DM"){heap_swap(1,cnt);cnt--;down(1);}else if(op=="D"){cin>>k;k=ph[k];heap_swap(k,cnt);cnt--;up(k);down(k);}else{cin>>k>>x;k=ph[k];h[k]=x;up(k);down(k);}}return 0;
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/72445436.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

团队作业1

目录团队管理与项目执行团队展示团队选题团队计划团队成员贡献分数分配 团队管理与项目执行 团队展示团队名称:飞跃队 团队成员:<组长> 赖国颢(3121000389)、李子聪(3121000393)、李济远(3121000303)、黄永名(3121008942)、李兆彬(3121006778)、刘立光(31210…

在 SwiftUI 中使用 Metal Shader

简介 从 iOS 17/macOS 14 开始,SwiftUI 支持使用 Metal shader 来实现一些特效。主要提供三个 View Modifier:colorEffect、 distortionEffect 和 layerEffect 。每个 modifier 的第一个参数是传入的 Shader 实例。 此外,View 实例还新增了一个 visualEffect modifier,用于…

STM32G431RBT6之LCD03

导入三个文件lcd.c && lcd.h && fonts.h 初始化 && 界面显示LCD_Init();LCD_Clear(Black); LCD_Clear(Black); LCD_SetBackColor(Black); LCD_SetTextColor(White); char temp[20]; LCD_DisplayStringLine(Line1,(u8)" DATA "); spr…

【MMD x EEVEE教程】导出60FPS ABC

在MMD桥左上角找到 这里模型是导入到blender里面,如果是其它软件,c4d什么的,可以选对应的脚本, 导出范围,0为开始帧,100为结束帧率,100 = mmd动作总帧率 * 2, mmd默认帧率都是30帧 为了导出快一些,可以调低一些导出的分辨率,不能调太低,10 x 10之类的 导出视频 …

ICMP协议

Internet控制消息协议ICMP (Internet Control Message Protocol)是IP协议的辅助协议 ICMP协议用来在网络设备间传递各种差错和控制信息,对于收集各种网络信息、诊断和排除各种网络故障等方面起着至关重要的作用。 icmp作用: 检测网络的双向联通性 ping 的格式: ping 空格 …