[奇技淫巧]带删除的优先队列

这个东西兹磁加入一个数,删除一个数(保证其存在),询问最值。
用两个优先队列实现,一个表示加入的,一个表示删除的,询问时当两个top相同时一并pop掉,直到不相同时就能得到真实答案。
代码:

struct heap
{
    priority_queue<int> Q,D;
    void push(int x) {Q.push(x);}
    void erase(int x) {D.push(x);}
    int top()
    {
        while(!D.empty()&&Q.top()==D.top()) Q.pop(),D.pop();
        return Q.empty()?0:Q.top();
    }
}H;

你可能感兴趣的:(优先队列,奇技淫巧)