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