Cod sursa(job #2260140)

Utilizator GiihuoTihufiNeacsu Stefan GiihuoTihufi Data 14 octombrie 2018 15:06:53
Problema Zeap Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.18 kb
#include<bits/stdc++.h>

using namespace std;

ifstream f("zeap.in");
ofstream g("zeap.out");

set<int> S;
multiset<int> M;

int main()
{
    string s;
    while(!f.eof())
    {
        getline(f,s);
        int nr=0;
        if(s[0]!='M')
        {
            int k=0;
            for(;!(s[k]>='0' && s[k]<='9');k++);
            for(;(s[k]>='0' && s[k]<='9');nr=nr*10+(s[k++]-'0'));
        }
        if(s[0]=='I')
        {
            auto it=S.find(nr);
            if(it!=S.end()) continue;
            if(S.size()>0)
            {
                if(nr>*S.rbegin())
                    M.insert(nr-*S.rbegin());
                else
                    if(nr<*S.begin())
                        M.insert(*S.begin()-nr);
                    else
                    {
                        auto it1=S.upper_bound(nr);
                        auto it2=--it1;
                        M.erase(M.find(*it1-*it2));
                        M.insert(nr-*it2);
                        M.insert(*it1-nr);
                    }
            }
            S.insert(nr);
        }
        if(s[0]=='S')
        {
            auto it=S.find(nr);
            if(it==S.end())
                g<<-1<<'\n';
            else
            {
                S.erase(it);
                if(nr>*S.rbegin())
                    M.erase(nr-*S.rbegin());
                else
                    if(nr<*S.begin())
                        M.erase(*S.begin()-nr);
                    else
                    {
                        auto it1=S.upper_bound(nr);
                        auto it2=it1;
                        --it2;
                        M.insert(*it1-*it2);
                        M.erase(M.find(nr-*it2));
                        M.erase(M.find(*it1-nr));
                    }
            }
        }
        if(s[0]=='C')
        {
            auto it=S.find(nr);
            g<<(it!=S.end()?1:0)<<'\n';
        }
        if(s[0]=='M' && s[1]=='A' && s[2]=='X')
            g<<((S.size()<2)?-1:*S.rbegin()-*S.begin())<<'\n';
        if(s[0]=='M' && s[1]=='I' && s[2]=='N')
            g<<(!M.size() ? -1:*M.begin())<<'\n';
    }
    return 0;
}