51nod pl1 小明统计数组

小明最近喜欢上数组统计,但是他遇到了一道难题,题目如下:

最初数列是空的,那么一共有下面五种操作:

  1. a x 表示向数列里面增加数值为x的数;

  2. d x 表示删除数列里面数值为x的数;

  3. I 表示删除数列里面数值最大的数;

  4. m 表示删除数列里面数值最小的数;

  5. 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;
}

```