可删堆

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
struct DelQueue
{
    priority_queue<int> q1,q2; int sum;
    inline void ins(int x) {q1.emplace(x),sum+=x;}
    inline void del(int x) {q2.emplace(x),sum-=x;}
    inline void rew()      {while(q1.size()&&q2.size()&&q1.top()==q2.top()) q1.pop(),q2.pop();}
    inline int  top()      {return rew(),q1.top();}
    inline void pop()      {sum-=top(),q1.pop();}
    inline int  size()     {return q1.size()-q2.size();}
};