这个东西兹磁加入一个数,删除一个数(保证其存在),询问最值。
用两个优先队列实现,一个表示加入的,一个表示删除的,询问时当两个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;