1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| template<typename T> class Topheap { public: priority_queue<T> less; priority_queue<T, vector<T>, greater<T>> more; const T inf = 2e9; Topheap(){less.push(-inf), more.push(inf);} void adjust() { if(less.size() > more.size() + 1) { more.push(less.top()); less.pop(); }
if(less.size() < more.size()) { less.push(more.top()); more.pop(); } } void push(T x) { if(x <= less.top()) less.push(x); else more.push(x); adjust(); }
T get(){ return less.top();} };
|