Cod sursa(job #2326528)

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

    }
    return 0;
}