当前位置: 首页 > news >正文

模拟堆(手写堆 的五大操作)

先看手写堆的相关问题:堆排序(手写堆)

五大操作:

image

 

 例题:

image

 输入样例:

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

期望输出:

-10
6

代码实现:

 

#include<bits/stdc++.h>
using namespace std;const int N =1e5+10;
int h[N];
int n,size;
int ph[N],hp[N];void hswap(int a,int b)
{swap(h[a],h[b]);swap(ph[a],ph[b]);swap(hp[a],hp[b]);
}void down(int u)
{int t=u;if(u*2<=size && h[u*2]<h[t]) t=u*2;if(u*2+1<size &&h[u*2+1]<h[t]) t=u*2+1;if(u!=t){hswap(u,t);down(t);}
}void up(int u)
{while(u/2 &&h[u/2]>h[u]){hswap(u/2,u);u=u/2;}
}int main()
{cin>>n;int k=0;//用来存储插入顺序for(int i=1;i<=n;i++){char op[3];int a,b;scanf("%s",op);if(!strcmp(op,"I")){cin>>a;size++;k++;ph[k]=size;hp[size]=k;h[size] = a;up(size);}else if (!strcmp(op,"PM")) cout<<h[1]<<endl;else if (!strcmp(op,"DM")){hswap(1,size);size --;down(1);}else if (!strcmp(op,"D")){cin>>a;a=ph[a];hswap(a,size);size--;down(a);up(a);//这里down和up只会执行一个}else{cin>>a>>b;a=ph[a];h[a]=b;down(a);up(a);}}return 0;
}

  

http://www.zskr.cn/news/3245.html

相关文章:

  • 完整教程:简单介绍一下Clickhouse及其引擎
  • 矩阵分解
  • 容斥原理
  • 简历优化全攻略:如何写出吸引HR的简历?
  • bashrc的一些配置记录
  • MyEMS与开源浪潮:如何重塑全球能源管理的未来格局
  • doms.ul.querySelectorvs document.querySelector:DOM查询的层级关系
  • Pwn2Own Automotive 2025 决赛日:49个零日漏洞与88万美元奖金揭晓
  • MyEMS在行动:揭秘开源能源管理系统如何重塑工业与楼宇的能效未来
  • 题解:P14015 [ICPC 2024 Nanjing R] 生日礼物
  • HyperWorks许可回收机制
  • flutter开发window打包成exe可执行文件的步骤
  • 基于Linux系统的定制软件安装硬件设备选型指南
  • c++之is_trivially_default_constructible
  • 猫树分治
  • AI导航生成寻路点-FindPathToLocationSynchronously
  • 智聘无界:AI 破解全球化招聘合规、成本与人才匹配难题的实践路径
  • Flink 与Flink可视化平台StreamPark教程(CDC功能)
  • GAS_Aura-Setting Up Auto Running
  • 源码调试-带你了解下车牌识别的深度学习模型-LPRNet
  • charles破解-在线生成激活码
  • 内部排序-直接插入排序冒泡排序快速排序对比
  • C++ auto关键字
  • ARM主板:低功耗高性能的嵌入式计算核心
  • Gin 模板系统深度解析:客服系统实战开发
  • 系统盘爆了,.vscode,.android占内存太多,使用mklink命令符号链接
  • Acrobat Pro DC 2025下载及破解安装教程,附永久免费免激活中文破解版Acrobat Pro DC安装包(稳定版)
  • 2025绩效管理必知
  • Laravel APP_DEBUG=true:存在账户信息泄露风险
  • 在Proxmox中部署Security Onion的安全配置实战