Cod sursa(job #1807223)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 16 noiembrie 2016 10:43:41
Problema Zeap Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.75 kb
#include <iostream>
#include <cstdio>
#include <set>

using namespace std;

char buf[30];
set<int> data;
multiset<int> dif;
set<int>::iterator it1, it2, it3;

int main()
{
    freopen("zeap.in", "r", stdin);
    freopen("zeap.out", "w", stdout);

    while (cin.getline(buf, 30))
    {
        if (buf[0] == 'M') {
            if (buf[1] == 'A') {
                if (data.size() < 2)
                    printf("-1\n");
                it1 = data.begin();
                it2 = data.end(); it2--;
                printf("%d\n", *it2 - *it1);
            }
            else {
                if (data.size() < 2)
                    printf("-1\n");
                printf("%d\n", *dif.begin());
            }
        }
        else {
            int nr = 0;
            for (int i = 2; buf[i]; i++)
                nr = nr*10 + buf[i]-'0';
            if (buf[0] == 'I') {
                pair<set<int>::iterator, bool> p = data.insert(nr);
                if (p.second == true) {
                    it1 = p.first;
                    if (data.size() == 1) continue;
                    if (it1 == data.begin()) {
                        ++it1;
                        dif.insert(*it1 - *p.first);
                        continue;
                    }
                    it2 = data.end(); it2--;
                    if (it1 == it2) {
                        --it1;
                        dif.insert(*it2 - *it1);
                        continue;
                    }
                    it2 = it1; it1--;
                    it3 = it1; it3++;
                    dif.erase(*it3-*it1);
                    dif.insert(*it2 - *it1);
                    dif.insert(*it3 - *it2);
                }
            }
            else if (buf[0] == 'S') {
                it1 = data.find(nr);
                if (it1 == data.end()) {
                    printf("-1\n");
                    continue;
                }
                if (data.size() == 1) continue;
                it2 = data.begin(), it3 = data.end();
                --it3;
                if (it1 == it2) {
                    it2++;
                    dif.erase(*it2 - *it1);
                    continue;
                }
                if (it1 == it3) {
                    it1--;
                    dif.erase(*it3 - *it1);
                    continue;
                }
                it2 = it3 = it1;
                it1--, it3++;
                dif.insert(*it3 - *it1);
                dif.erase(*it2 - *it1);
                dif.erase(*it3 - *it2);
                data.erase(it2);
            }
            else if (buf[0] == 'C') {
                printf("%d\n", data.find(nr) != data.end());
            }
        }
    }

    return 0;
}