「学习笔记」可删除堆

原理#

就是用两个堆来维护,一个堆存放在堆中的元素,另一个存放应该删除的元素,取堆顶时,看看要取的堆顶元素与要删除的元素堆的堆顶元素是否相同,相同就 pop(),直到堆顶元素不相等或一个堆为空时停止 pop(),取堆顶

代码#

struct Heap {// 可删除堆
	priority_queue<ll, vector<ll>, greater<ll> > q1, q2;// q1 插入的元素 q2 要删除的元素
	
	void insert(ll x) {// 插入
		q1.push(x);
	}
	
	void del(ll x) {// 删除
		q2.push(x);
	}
	
	ll get() {// 取堆顶
		while(!q2.empty() && !q1.empty() && q2.top() == q1.top()) {
			q1.pop(), q2.pop();
		}
		return q1.top();
	}
} heap;

作者:yifan0305

出处:https://www.cnblogs.com/yifan0305/p/16560773.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

转载时还请标明出处哟!

posted @   yi_fan0305  阅读(165)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示