Cod sursa(job #2899639)

Utilizator Valentin06Maftei Valentin Valentin06 Data 8 mai 2022 23:56:14
Problema Zeap Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.22 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("zeap.in");
ofstream out("zeap.out");

set<int>::iterator i, i1, i2, i3;
multiset<int>::iterator indexDif;

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

int main() {
    string operatie;

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

        else if (operatie[0] == 'S') {
            in >> numar;
            if (zeap.find(numar) == zeap.end())
                out << -1 << '\n';
            else {
                i = zeap.find(numar);
                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') {
            in >> numar;
            if (zeap.find(numar) != zeap.end())
                out << 1 << '\n';
            else
                out << 0 << '\n';
        }

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

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