其他分享
首页 > 其他分享> > 可删除堆

可删除堆

作者:互联网

可删除堆

原理

就是用两个堆来维护,一个堆存放在堆中的元素,另一个存放应该删除的元素,取堆顶时,看看要取的堆顶元素与要删除的元素堆的堆顶元素是否相同,相同就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;

标签:q1,q2,删除,取堆,元素,pop
来源: https://www.cnblogs.com/yifan0305/p/16560773.html