Cod sursa(job #2899646)

Utilizator Valentin06Maftei Valentin Valentin06 Data 9 mai 2022 00:24:58
Problema Zeap Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.32 kb
#include <fstream>
#include <set>

using namespace std;

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

char operatie[11];
set<int>::iterator i, i1, i2, i3;
multiset<int>::iterator indexDif;

int x;
set<int> zeap;
multiset<int> diferenta;

int main()
{
    while (fin >> operatie)
    {
        if (operatie[0] == 'I')
        {
            fin >> x;
            if (zeap.find(x) == zeap.end())
            {
                zeap.insert(x);
                i = zeap.find(x);
                if (i != zeap.begin())
                {
                    i1 = i;
                    --i1;
                    diferenta.insert(*i - *i1);
                }
                i2 = i;
                ++i2;
                if (i2 != zeap.end())
                    diferenta.insert(*i2 - *i);
            }
        }

        else if (operatie[0] == 'S')
        {
            fin >> x;
            i = zeap.find(x);
            if (i == zeap.end())
                fout << -1 << '\n';
            else
            {
                if (i != zeap.begin())
                {
                    i1 = i;
                    --i1;
                    diferenta.erase(diferenta.find(*i - *i1));
                    i3 = i;
                    ++i3;
                    if (i3 != zeap.end())
                        diferenta.insert(*i3 - *i1);
                }
                i2 = i;
                ++i2;
                if (i2 != zeap.end())
                    diferenta.erase(diferenta.find(*i2 - *i));
                zeap.erase(i);
            }
        }

        else if (operatie[0] == 'C')
        {
            fin >> x;
            i = zeap.find(x);
            if (i != zeap.end())
                fout << 1 << '\n';
            else
                fout << 0 << '\n';
        }

        else if (operatie[1] == 'A')
        {
            if (zeap.size() < 2)
                fout << -1 << '\n';
            else
            {
                i2 = zeap.end();
                --i2;
                i1 = zeap.begin();
                fout << *i2 - *i1 << '\n';
            }
        }

        else if (operatie[1] == 'I')
        {
            if (diferenta.empty())
                fout << -1 << '\n';
            else
            {
                indexDif = diferenta.begin();
                fout << *indexDif << '\n';
            }
        }
    }
    return 0;
}