Cod sursa(job #2327857)

Utilizator refugiatBoni Daniel Stefan refugiat Data 25 ianuarie 2019 08:31:05
Problema Zeap Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.51 kb
#include <iostream>
#include <cstdio>
#include <set>
#include <cctype>
using namespace std;
FILE*si=fopen("zeap.in", "r");
FILE*so=fopen("zeap.out", "w");
set<int> s;
multiset<int> d;
char v[50];
int main()
{
    while(!feof(si)) {
        fgets(v, 50, si);
        if(feof(si))
            break;
        int nr=0;
        if(v[0]!='M') {
            int i=2;
            while(isdigit(v[i])) {
                nr=nr*10+v[i]-'0';
                //cout<<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()) {
                fprintf(so, "-1\n");
            }
            else {
                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));
                    }
            }

            continue;
        }
        if(v[0]=='C') {
            auto it=s.find(nr);
            if(it==s.end())
                fprintf(so, "0\n");
            else
                fprintf(so, "1\n");
        }
        if(v[0]=='M')
        if(v[1]=='A') {
            if(s.size()>1)
                fprintf(so, "%i\n", (*s.rbegin()-*s.begin()));
            else
                fprintf(so, "-1\n");
        }
        else if(v[1]=='I') {
            if(d.size())
                fprintf(so, "%i\n", *d.begin());
            else
                fprintf(so, "-1\n");
        }

    }
    return 0;
}