Cod sursa(job #1191122)

Utilizator mirceadinoMircea Popoveniuc mirceadino Data 26 mai 2014 17:45:30
Problema Zeap Scor 70
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 1.94 kb
#include<fstream>
#include<algorithm>
#include<set>

using namespace std;

typedef pair<set<int>::iterator,bool> pib;
const int INF = (1LL<<31)-1;

set<int> S;
multiset<int> Q;
set<int>::iterator it;
pib P;

int main()
{
    char c;
    int x,a,b;

    ifstream fin("zeap.in");
    ofstream fout("zeap.out");

    S.insert(0);
    S.insert(INF);

    while(fin>>c)
    {
        if(c=='I')
        {
            fin>>x;
            P=S.insert(x);
            if(P.second)
            {
                it=P.first;
                it--;
                a=*it;
                it++;
                it++;
                b=*it;
                if(a>0) Q.insert(x-a);
                if(b<INF) Q.insert(b-x);
                if(a>0 && b<INF) Q.erase(b-a);
            }
            continue;
        }
        if(c=='S')
        {
            fin>>x;
            it=S.find(x);
            if(it!=S.end())
            {
                it--;
                a=*it;
                it++;
                it++;
                b=*it;
                it--;
                if(a>0) Q.erase(x-a);
                if(b<INF) Q.erase(b-x);
                if(a>0 && b<INF) Q.insert(b-a);
                S.erase(it);
            }
            else fout<<-1<<'\n';
            continue;
        }
        if(c=='C')
        {
            fin>>x;
            fout<<((S.find(x))!=(S.end()))<<'\n';
            continue;
        }
        fin>>c;
        fin>>c;
        if(S.size()<=3)
        {
            fout<<-1<<'\n';
            continue;
        }
        if(c=='X')
        {
            it=S.end();
            it--;
            it--;
            a=*it;
            it=S.begin();
            it++;
            b=*it;
            fout<<a-b<<'\n';
            continue;
        }
        else
        {
            fout<<*(Q.begin())<<'\n';
            continue;
        }
    }

    return 0;
}