#堆#(洛谷 3378)堆

本文介绍了一种使用优先队列实现的小根堆操作方法,包括插入元素、输出最小元素及删除最小元素等基本操作,并提供了具体的C++实现代码。

操作1: 1 x 表示将x插入到堆中

操作2: 2 输出该小根堆内的最小数

操作3: 3 删除该小根堆内的最小数

分析:运用了堆的思想。对于蒟蒻来说优先队列真是个好东西。

#include <cstdio>
#include <queue>
using namespace std;
priority_queue<int>q;
int n;
int main(){
scanf("%d",&n);
while (n--){
int x,y;
scanf("%d",&x);
if (x==1){
scanf("%d",&y);
q.push(-y);//插入变成小根堆
}
else if (x==2) printf("%d",-q.top());//当然要恢复原样
else q.pop();//弹出
}
}

 

 

洛谷平台上并没有特别典型的专门针对可持久化可并的模板题,但可以通过一些数据结构和算法的综合题目来锻炼相关的实现能力。以下是一些可能有帮助的题目: #### P3835 【模板】可持久化平衡树 虽然这是可持久化平衡树的模板题,但在实现可持久化的思路上有一定的借鉴意义。它需要维护一个可重整数集合,支持插入、删除、查询排名、查询排名对应的数、求前驱和后继等操作,且每次操作基于某一历史版本并生成新的版本。 ```python # 简单示例代码框架,非完整实现 class Node: def __init__(self): self.left = None self.right = None self.val = 0 def build(l, r): node = Node() if l == r: return node mid = (l + r) // 2 node.left = build(l, mid) node.right = build(mid + 1, r) return node ``` #### P3919 【模板】可持久化线段树 1(可持久化数组) 该题涉及对数组的修改和查询操作,每次操作会产生新的版本,对于理解可持久化数据结构的版本维护有帮助。 ```python # 简单示例代码框架,非完整实现 class Node: def __init__(self): self.left = None self.right = None self.val = 0 def update(pre, l, r, pos, val): cur = Node() cur.left = pre.left cur.right = pre.right cur.val = pre.val if l == r: cur.val = val return cur mid = (l + r) // 2 if pos <= mid: cur.left = update(pre.left, l, mid, pos, val) else: cur.right = update(pre.right, mid + 1, r, pos, val) return cur ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值