小明最近喜欢上数组统计,但是他遇到了一道难题,题目如下:
最初数列是空的,那么一共有下面五种操作:
a x 表示向数列里面增加数值为x的数;
d x 表示删除数列里面数值为x的数;
I 表示删除数列里面数值最大的数;
m 表示删除数列里面数值最小的数;
q 询问当前数列的和。
保证添加的元素都不不一样,对于删除操作,如果数列里面不存在这个元素,则不进行删除操作。小明不会做,希望寻求你的帮助,聪明的你可以帮助小明解决这个问题吗?
在处理输入的时候要特别注意!题目中操作 3 的操作字符是 大写的 i,而不是小写的 l。
可用set进行模拟:
```c++
#include<bits/stdc++.h>
using namespace std;
set<int> Q;
int main() {
int n, x;
char ch;
cin >> n;
long long ans = 0;
for (int i = 0; i < n; i++) {
cin >> ch;
if (ch == 'a') {
cin >> x;
Q.insert(x);
ans += x;
}
else if (ch == 'd') {
cin >> x;
if (Q.find(x) != Q.end()) {
Q.erase(x);
ans -= x;
}
}
else if (ch == 'm') {
if (Q.size() != 0) {
ans -= *(Q.begin());
Q.erase(*(Q.begin()));
}
}
else if (ch == 'I') {
if (Q.size() != 0) {
set<int>::iterator it = Q.end();
it--;
ans -= *it;
Q.erase(*it);
}
}
else if (ch == 'q') {
cout << ans << endl;
}
}
return 0;
}
```