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

洛谷 P3378:[模板] 堆 ← 二叉堆

【题目来源】
https://www.luogu.com.cn/problem/P3378

【题目描述】
给定一个数列,初始为空,请支持下面三种操作:
1. 给定一个整数 x,请将 x 加入到数列中。
2. 输出数列中最小的数。
3. 删除数列中最小的数(如果有多个数最小,只删除 1 个)。

【输入格式】
第一行是一个整数,表示操作的次数 n。
接下来 n 行,每行表示一次操作。每行首先有一个整数 op 表示操作类型。
· 若 op=1,则后面有一个整数 x,表示要将 x 加入数列。
· 若 op=2,则表示要求输出数列中的最小数。
· 若 op=3,则表示删除数列中的最小数。如果有多个数最小,只删除 1 个。

【输出格式】
对于每个操作 2,输出一行一个整数表示答案。​​​​​​​

【输入样例】
5
1 2
1 5
2
3
2​​​​​​​

【输出样例】
2
5​​​​​​​

【数据范围】
· 对于 30% 的数据,保证 n≤15。
· 对于 70% 的数据,保证 n≤10^4。
· 对于 100% 的数据,保证 1≤n≤10^6,1≤x<2^31,op∈{1,2,3}。

【算法分析】
● 堆是「抽象思想 / 数据结构」,priority_queue 是「C++ 对堆的封装实现」。
(1)简单而言,priority_queue 是 C++ 对 “堆” 这个数据结构的封装实现,但堆的概念比 priority_queue 更宽泛(比如还有左偏树、二项堆等特殊堆)。
(2)priority_queue 是堆的 “常用款实现”,但堆不仅仅只有 priority_queue 这一种实现。
(3)在需要堆的「高级功能」时,会发现 priority_queue 只是堆的 “子集实现”。例如,priority_queue 只能删除堆顶,无法直接删除中间节点等。

● ​​​​​​​左偏树
(1)左偏树是一种可合并的堆(也叫 “可并堆”),它在普通二叉堆(大根 / 小根堆)的基础上,增加了「快速合并两个堆」的能力,同时保证堆的性质(小根堆:父节点≤子节点;大根堆反之)。普通二叉堆合并两个堆的时间复杂度是 O(n),而左偏树能做到 O(logn),这是它的核心优势。
(2)STL 未提供左偏树的实现,必须手动实现(指针 / 结构体 + 递归)。

● 为什么大家常说 “priority_queue 就是堆”?
在 C++ 日常开发 / 算法题中,99% 的场景只需要普通二叉堆(大根 / 小根堆),而 priority_queue刚好完美封装了普通二叉堆的所有核心操作。
(1)小根堆:priority_queue<int,vector<int>,greater<int>> pq;
(2)大根堆:priority_queue<int> pq;

【算法代码】

#include <bits/stdc++.h>
using namespace std;priority_queue<int,vector<int>,greater<int>> q;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);int n,op,x;cin>>n;while(n--) {cin>>op;if(op==1) {cin>>x;q.push(x);}if(op==2) cout<<q.top()<<endl;if(op==3) q.pop();}
}/*
in:
5
1 2
1 5
2
3
2out:
2
5
*/





【参考文献】
https://www.cnblogs.com/Seren-blingbling/p/19413027
https://www.luogu.com.cn/problem/solution/P3378
https://blog.csdn.net/hnjzsyjyj/article/details/146358448




 

http://www.jsqmd.com/news/395087/

相关文章:

  • 论文写作AI工具如何挑?这份实测过的五大网站排名请收下
  • LabVIEW列车轴承声学成像应用
  • 高效完成论文的AI工具怎么选?精选五大优质平台排名解析
  • 基于时频自适应掩膜和形态学优化的地震数据降噪方法(MATLAB)
  • 五大优质AI论文写作网站推荐,解决你的毕业论文创作难题
  • 开源版 EMQX(集群版)搭建
  • 选AI写论文工具不用愁,权威测评的5个网站排名已整理好
  • 还在纠结论文AI写作工具?这5个高口碑网站排名帮你高效决策
  • 揭秘!提示工程架构师跨界整合案例背后的故事
  • 毕业论文AI写作工具怎么选?这份五大可靠平台排名值得收藏
  • AI原生应用架构设计:如何选择最适合的API编排方案
  • BISHI63 计算阶乘
  • AI原生应用中微服务集成的日志管理与分析方法
  • Tauri 开发环境 Prerequisites 桌面 + 移动端)
  • 毕业论文AI辅助写作选哪个?盘点用户推荐的5个实用平台
  • Atcoder 90 问记录
  • wps/word单倍行距加入公式空白间隙仍然很大?
  • AI Agent技术栈:10个构建生产级Agent的核心概念
  • Shell脚本以及Shell脚本的基础语法就是什么
  • 详细介绍:[特殊字符]BZOJ 离线刷题神级工具!免联网 + 浏览器即开 + 题解代码全,效率直接翻倍!
  • Vue.js 循环语句
  • CVE-2011-1669
  • AngularJS 表达式
  • 【rust-i18n】简介
  • 2026 人工智能与大数据专业毕业论文选题方向及题目示例(nlp/自然语言处理/图像处理)​完整教程:从入门到实战部署
  • PHP Mail:全面解析邮件发送与接收
  • 毕业论文AI辅助工具选哪个?6款热门推荐解析
  • 小白程序员轻松上手OpenClaw+DeepSeek+Slack打造全天候智能办公助手
  • 小白程序员必备:3分钟搞懂AI Agent,开启智能助理学习之旅
  • 2026年论文语法润色AI选型指南:精准修正学术表达与多模型输出对比的核心逻辑 - 小白条111