news 2026/6/14 12:00:03

堆 标准模板题及基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
堆 标准模板题及基础

STL定义:

最大堆(默认):
priority_queue<int> heap;
最小堆:
priority_queue<int,vector<int>,greater<int> > heap;

注意!!!虽然是小根堆,但是这里是GREATER!!!

自定义比较器:

struct compare{ bool operater(int a,int b){ return a>b; } }; priority_queue<int,vector<int>,compare> pq;

巨坑!!!

最后一行的堆是小根堆,

return a<b;

与排序的顺序相反!

1.模板题:

P3378 【模板】堆

提交答案加入题单复制题目

提交200.08k

通过86.76k

时间限制1.00s

内存限制512.00MB

题目编号P3378

题目描述

给定一个数列,初始为空,请支持下面三种操作:

  1. 给定一个整数 x,请将 x 加入到数列中。
  2. 输出数列中最小的数。
  3. 删除数列中最小的数(如果有多个数最小,只删除 1 个)。

输入格式

第一行是一个整数,表示操作的次数 n。
接下来 n 行,每行表示一次操作。每行首先有一个整数 op 表示操作类型。

  • 若 op=1,则后面有一个整数 x,表示要将 x 加入数列。
  • 若 op=2,则表示要求输出数列中的最小数。
  • 若 op=3,则表示删除数列中的最小数。如果有多个数最小,只删除 1 个。

输出格式

对于每个操作 2,输出一行一个整数表示答案。

输入输出样例

输入 #1复制

5 1 2 1 5 2 3 2

输出 #1复制

2 5

说明/提示

【数据规模与约定】

  • 对于 30% 的数据,保证 n≤15。
  • 对于 70% 的数据,保证 n≤104。
  • 对于 100% 的数据,保证 1≤n≤106,1≤x<231,op∈{1,2,3}。
    #include <bits/stdc++.h> using namespace std; int heap[1000005]; int pos=1; void push(int x) { heap[pos]=x; int kid=pos; int dad=kid/2; while (dad>=1 and heap[kid]<heap[dad]) { swap(heap[kid],heap[dad]); kid=dad; dad=kid/2; } pos++; } void down(int n) { int self=n; while(true) { int left=2*self; int right=2*self+1; int smallest=self; if(left<pos and heap[left]<heap[smallest]) { smallest=left; } if(right<pos and heap[right]<heap[smallest]) { smallest=right; } if(smallest!=self) { swap(heap[self],heap[smallest]); self=smallest; }else{ break; } } } void del() { if (pos<=1) return; swap(heap[1],heap[pos-1]); pos--; down(1); } int main() { int n; cin>>n; while(n--) { int op; cin>>op; switch (op) { case 1: { int x; cin>>x; push(x); break; } case 2:{ if(pos>1) { cout<<heap[1]<<endl; } break; } case 3:{ del(); break; } } } return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 21:07:28

12.20问题盘点

在匹配条件的时候完全就想少了,副对角线的特征就是行数加列数为总行数最开始写的循环条件是不等于\0,结果运行超时&#xff0c;很明显就是忘记了\0不是用户输入的&#xff0c;是电脑自带的键盘上是不存在这个输入的&#xff0c;就会导致根本输入就结束不了&#xff0c;输出就会…

作者头像 李华
网站建设 2026/6/12 23:14:52

2025年大模型使用全景图:6大趋势助你抢占AI先机

本文基于2025年全球LLM使用年报&#xff0c;揭示六大趋势&#xff1a;市场将形成开源与闭源双生态&#xff1b;代理式推理取代对话成为主流&#xff1b;编程跃升为第一大使用场景&#xff1b;用户更看重模型能力而非价格&#xff1b;模型需满足特定需求保持用户粘性&#xff1b…

作者头像 李华
网站建设 2026/6/12 22:26:41

电路板维修

稳压二极管击穿、电容击穿&#xff0c;正极对负极直接短路 &#xff0c;把电源直接拉到0查找短路源&#xff1a;熏松香&#xff0c;哪个芯片短路&#xff0c;供电后会发热&#xff0c;上面的白霜就会融化检查开发板是否短路用DC电源给开发板供电&#xff0c;看电流是否在正常范…

作者头像 李华
网站建设 2026/6/14 7:42:18

一文搞懂DNAT与SNAT:内网外网通信的“流量翻译官”

导读:在运维工作中,内网服务器访问外网、外网用户访问内网服务,是最常见的场景之一。而实现这两种通信的核心技术,就是DNAT和SNAT。很多运维同学刚接触时,总会混淆两者的作用——到底哪个是“内网出外网”用的?哪个是“外网进内网”用的?配置时又该注意什么?本文就从实…

作者头像 李华
网站建设 2026/6/14 5:01:03

智能建议模块 Cordova 与 OpenHarmony 混合开发实战

欢迎大家加入开源鸿蒙跨平台开发者社区&#xff0c;一起共建开源鸿蒙跨平台生态。 &#x1f4cc; 概述 智能建议模块是福报养成计应用中的一个关键功能&#xff0c;它基于用户的历史数据和行为模式&#xff0c;使用机器学习和数据分析算法来识别用户的福报积累规律&#xff0c…

作者头像 李华
网站建设 2026/6/13 14:32:37

160. 相交链表

160. 相交链表 - 力扣&#xff08;LeetCode&#xff09; 简单 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保…

作者头像 李华