Cod sursa(job #1400914)

Utilizator Ionut228Ionut Calofir Ionut228 Data 25 martie 2015 15:38:43
Problema Zeap Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.35 kb
#include <fstream>
#include <set>

using namespace std;

ifstream fin("zeap.in");
ofstream fout("zeap.out");

char s[11];
int x;
set<int> S;
multiset<int> Smin;

int main()
{
    set<int>::iterator it, it1, it2, its;
    multiset<int>::iterator itmin;
    while (fin >> s)
    {
        if (s[0] == 'I')
        {
            fin >> x;
            if (S.find(x) == S.end())
            {
                S.insert(x);
                it = S.find(x);

                if (it != S.begin())
                {
                    it1 = it;
                    --it1;
                    Smin.insert(*it - *it1);
                }

                it2 = it;
                ++it2;
                if (it2 != S.end())
                    Smin.insert(*it2 - *it);
            }
        }
        else if (s[0] == 'S')
        {
            fin >> x;
            it = S.find(x);
            if (it == S.end())
                fout << -1 << '\n';
            else
            {
                if (it != S.begin())
                {
                    it1 = it;
                    --it1;
                    Smin.erase(Smin.find(*it - *it1));

                    its = it;
                    ++its;
                    if (its != S.end())
                        Smin.insert(*its - *it1);
                }

                it2 = it;
                ++it2;
                if (it2 != S.end())
                    Smin.erase(Smin.find(*it2 - *it));

                S.erase(it);
            }
        }
        else if (s[0] == 'C')
        {
            fin >> x;
            it = S.find(x);
            if (it != S.end())
                fout << 1 << '\n';
            else
                fout << 0 << '\n';
        }
        else if (s[1] == 'A')
        {
            if (S.size() < 2)
                fout << -1 << '\n';
            else
            {
                it2 = S.end();
                --it2;
                it1 = S.begin();

                fout << *it2 - *it1 << '\n';
            }
        }
        else if (s[1] == 'I')
        {
            if (Smin.empty())
                fout << -1 << '\n';
            else
            {
                itmin = Smin.begin();
                fout << *itmin << '\n';
            }
        }
    }

    fin.close();
    fout.close();
    return 0;
}