【牛客一道模板】
struct MidNum {
multiset<int> p, q;
//p 从大到小 q从小到大
void work() {
while (p.size() > q.size() + 1) {
q.insert(*p.rbegin());
p.erase(--p.end());
}
while (p.size() < q.size()) {
p.insert(*q.begin());
q.erase(q.begin());
}
}
void add(int x) {
if (!q.empty() && x >= *q.begin()) {
q.insert(x);
}
else {
p.insert(x);
}
work();
}
void del(int x) {
if (q.contains(x)) {
q.erase(q.lower_bound(x));
}
else if (p.contains(x)) {
p.erase(p.lower_bound(x));
}
work();
}
int get_mid() {
return *p.rbegin();
}
/*
偶数时中位数;
*/
int get_even_mid() {
return (*p.rbegin() + *q.begin()) / 2;
}
};