Cod sursa(job #2395493)

Utilizator refugiatBoni Daniel Stefan refugiat Data 2 aprilie 2019 16:50:57
Problema Zeap Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
#include <iostream>
#include <fstream>
#include <set>
#include <cctype>
using namespace std;
ifstream si("zeap.in");
ofstream so("zeap.out");
char s[50];
set<int>S;
multiset<int>S2;
int main()
{
    while(!si.eof()) {
        si.getline(s,50);
        int nr=0;
        if(s[0]!='M') {
            int k=0;
            while(!(s[k]>='0'&&s[k]<='9'))
                k++;
            while(s[k]>='0'&&s[k]<='9') {
                nr=nr*10+(s[k]-'0');
                k++;
            }
        }
        if(s[0]=='I') {
            auto it=S.find(nr);
            if(it!=S.end())
                continue;
            if(S.size()) {
                if(nr>*S.rbegin())
                    S2.insert(nr-*S.rbegin());
                else
                    if(nr<*S.begin())
                        S2.insert(*S.begin()-nr);
                    else {
                        auto it1=S.upper_bound(nr);
                        auto it2=it1;
                        --it2;
                        S2.erase(S2.find(*it1-*it2));
                        S2.insert(nr-*it2);
                        S2.insert(*it1-nr);
                    }
            }
            S.insert(nr);
        }
        if(s[0]=='S') {
            auto it=S.find(nr);
            if(it==S.end())
                so<<-1<<'\n';
            else {
                S.erase(it);
                if(nr>*S.rbegin())
                    S2.erase(nr-*S.rbegin());
                else
                    if(nr<*S.begin())
                        S2.erase(*S.begin()-nr);
                    else
                    {
                        auto it1=S.upper_bound(nr);
                        auto it2=it1;
                        --it2;
                        S2.insert(*it1-*it2);
                        S2.erase(S2.find(nr-*it2));
                        S2.erase(S2.find(*it1-nr));
                    }
            }
            continue;
        }
        if(s[0]=='C') {
            auto it=S.find(nr);
            so<<(it!=S.end())<<'\n';
        }
        if(s[0]=='M'&&s[1]=='A')
            so<<((S.size()<2)?-1:*S.rbegin()-*S.begin())<<'\n';
        if(s[0]=='M'&&s[1]=='I')
            so<<((!S2.size())?-1:*S2.begin())<<'\n';
    }
    return 0;
}