Cod sursa(job #2899379)

Utilizator AntoniaPopoviciAntonia-Adelina Popovici AntoniaPopovici Data 8 mai 2022 17:19:22
Problema Zeap Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.2 kb
#include <fstream>
#include <set>

using namespace std;

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


set<int>::iterator i, i1, i2, is;
multiset<int>::iterator imin;

char sir[11];
int x;
set<int> zeap;
multiset<int> zeapmin;

void insereaza(int x)
{
    if (zeap.find(x) == zeap.end())
    {
        zeap.insert(x);
        i = zeap.find(x);

        if (i != zeap.begin())
        {
            i1 = i;
            --i1;
            zeapmin.insert(*i - *i1);
        }

        i2 = i;
        ++i2;
        if (i2 != zeap.end())
            zeapmin.insert(*i2 - *i);
    }
}

void sterge(int x)
{
    i = zeap.find(x);
    if (i == zeap.end())
        fout << -1 << '\n';
    else
    {
        if (i != zeap.begin())
        {
            i1 = i;
            --i1;
            zeapmin.erase(zeapmin.find(*i - *i1));

            is = i;
            ++is;
            if (is != zeap.end())
                zeapmin.insert(*is - *i1);
        }

        i2 = i;
        ++i2;
        if (i2 != zeap.end())
            zeapmin.erase(zeapmin.find(*i2 - *i));

        zeap.erase(i);
    }
}

void cauta(int x)
{
    i = zeap.find(x);
    if (i != zeap.end())
        fout << 1 << '\n';
    else
        fout << 0 << '\n';
}

void maxdif()
{
    if (zeap.size() < 2)
        fout << -1 << '\n';
    else
    {
        i2 = zeap.end();
        --i2;
        i1 = zeap.begin();

        fout << *i2 - *i1 << '\n';
    }
}

void mindif()
{
    if (zeapmin.empty())
        fout << -1 << '\n';
    else
    {
        imin = zeapmin.begin();
        fout << *imin << '\n';
    }
}

int main()
{
    while (fin >> sir)
    {
        if (sir[0] == 'I')
        {
            fin >> x;
            insereaza(x);
        }
        else if (sir[0] == 'S')
        {
            fin >> x;
            sterge(x);   
        }
        else if (sir[0] == 'C')
        {
            fin >> x;
            cauta(x);
        }
        else if (sir[1] == 'A')
        {
            maxdif();
        }
        else if (sir[1] == 'I')
        {
            mindif();
        }
    }

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