Cod sursa(job #2199219)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 26 aprilie 2018 22:24:33
Problema Zeap Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.12 kb
#include<bits/stdc++.h>
using namespace std;
ifstream f("zeap.in");
ofstream g("zeap.out");
string sir;
int nr;
int maxi,mini;
set<int>s;
set<int> ::iterator it,it2,it1;
multiset<int>s2;
int main()
{
    while(f>>sir)
    {
        if(sir[0]!='M')
            f>>nr;
        if(sir[0]=='I')
        {
            it=s.find(nr);
            if(it==s.end())
            {
                if(s.size())
                {
                    it=s.end();
                    --it;
                    if(nr>*it)
                        s2.insert(nr-*it);
                    else
                        if(nr<*s.begin())
                        {
                            it=s.begin();
                            if(*it>nr)
                                s2.insert(*it-nr);
                        }
                        else
                        {
                            it1=upper_bound(s.begin(),s.end(),nr);
                            it2=it1;
                            --it2;
                            s2.erase(*it1-*it2);
                            s2.insert(nr-*it2);
                            s2.insert(*it1-nr);
                        }
                }
                s.insert(nr);
            }
        }
        if(sir[0]=='S')
        {
            it=s.find(nr);
            if(it==s.end())
                g<<-1<<'\n';
            else
            {
                s.erase(nr);
                it1=it;
                ++it1;
                if(it1==s.end())
                {
                    it1=it;
                    --it1;
                    s2.erase(nr-*it1);
                }
                else
                    if(nr==*s.begin())
                    {
                        it1=s.begin();
                        if(*it1==nr)
                        {
                            ++it1;
                            s2.erase(*it1-nr);
                            continue;
                        }
                    }
                    else
                    {
                        it1=upper_bound(s.begin(),s.end(),nr);
                        it2=it1;
                        --it2;
                        s2.insert(*it1-*it2);
                        s2.erase(nr-*it2);
                        s2.erase(*it1-nr);
                    }
            }
        }
        if(sir[0]=='C')
        {
            it=s.find(nr);
            if(it!=s.end())
                g<<1<<'\n';
            else
                g<<0<<'\n';
        }
        if(sir[0]=='M' && sir[1]=='A')
        {
            if(s.size()<2)
                g<<-1<<'\n';
            else
            {
                it=s.begin();
                it2=s.end();
                while(it2==s.end())
                    --it2;
                g<<*it2-*it<<'\n';
            }
        }
        if(sir[0]=='M' && sir[1]=='I')
        {
            if(s.size()<2)
                g<<-1<<'\n';
            else
                {
                    it=s2.begin();
                    g<<*it<<'\n';
                }
        }
    }
    return 0;
}