Cod sursa(job #2899606)

Utilizator Valentin06Maftei Valentin Valentin06 Data 8 mai 2022 23:23:00
Problema Zeap Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.57 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(string operatie)
{
    int nr = 0;
    for (int index = 2; operatie[index]; index++)
        nr = nr * 10 + operatie[index] - 48;
    return nr;
}

void inserare(int 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 - *i1);
    }
}

void stergere(int x){
    if (zeap.find(x) == zeap.end())
        out << -1 << '\n';
    else
    {
        i = zeap.find(x);
        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);
    }
}

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

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

void minim(){
    if (diferenta.empty() == 1)
        out << -1 << '\n';
    else
    {
        indexDif = diferenta.begin();
        out << *indexDif << '\n';
    }
}

int main() {
    string operatie;
    int x;
    while (getline(in, operatie))
    {
        if (operatie[0] == 'I')
        {
            x = numar(operatie);
            inserare(x);
        }
        if (operatie[0] == 'S')
        {
            x = numar(operatie);
            stergere(x);
        }
        if (operatie[0] == 'C')
        {
            x = numar(operatie);
            if (zeap.find(x) == zeap.end())
                out << 0 << '\n';
            else
                out << 1 << '\n';
        }
        if (operatie == "MIN")
        {
            if(zeap.size() < 2)
                out << -1 << '\n';
            else
                minim();
        }
        if (operatie == "MAX")
        {
            if(zeap.size() < 2)
                out << -1 << '\n';
            else
                out << *(--zeap.end()) - *(zeap.begin()) << '\n';
        }
    }
    return 0;
}