当前位置: 首页 > 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.wxhsa.cn/company.asp?id=2192

相关文章:

  • 【A】杂题悬桨
  • 使用Osquery进行远程取证:NTFS取证扩展实战指南
  • 完整教程:简单介绍一下Clickhouse及其引擎
  • 矩阵分解
  • 11
  • 基于 Gitlab 实现 Go 的 CI/CD
  • 2025.9.11
  • 容斥原理
  • 【B】世良真纯
  • 如何使用jobleap.cn避免简历中的严重错误
  • 在 Zustand 中创建通用 Action 的优雅实践
  • 如何用产品思维优化简历的“用户体验”?
  • 简历如何优化,简历如何投递,面试如何准备?
  • 网络流做题笔记
  • 简历优化全攻略:如何写出吸引HR的简历?
  • 重塑云上 AI 应用“运行时”,函数计算进化之路
  • 25.9.12 C语言基本数据类型
  • Avalonia:基础导航
  • bashrc的一些配置记录
  • H5游戏性能优化系列-----协议相关优化
  • 实现我的第一个langchain应用
  • 小说可视化系统设计(程序员副业项目)
  • MyEMS与开源浪潮:如何重塑全球能源管理的未来格局
  • React Antd or Antd Pro:findDOMNode is deprecated and will be removed in the next major release.
  • 单板挑战4路YOLOv8!米尔瑞芯微RK3576开发板性能实测
  • doms.ul.querySelectorvs document.querySelector:DOM查询的层级关系
  • 穿越钱塘江:一条高铁隧道背后的技术挑战
  • Pwn2Own Automotive 2025 决赛日:49个零日漏洞与88万美元奖金揭晓
  • 9.HPA与VPA
  • MyEMS在行动:揭秘开源能源管理系统如何重塑工业与楼宇的能效未来