Cod sursa(job #151131)

Utilizator sealTudose Vlad seal Data 7 martie 2008 20:36:57
Problema Zeap Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.83 kb
using namespace std;
#include<cstdio>
#include<set>

int main()
{
    char A[16];
    int i,x,ok;
    set<int> S;
    set<int>::iterator it1,it2,it;
    multiset<int> M;

    freopen("zeap.in","r",stdin);
    freopen("zeap.out","w",stdout);

    while(gets(A))
        if(A[0]=='I' || A[0]=='S' || A[0]=='C')
        {
            for(x=0,i=2;A[i];++i)
                x=x*10+A[i]-'0';
            if(A[0]=='I')
            {
                it1=it2=it=S.lower_bound(x);
                if(it!=S.end() && *it==x)
                    continue;
                ok=1;
                if(it!=S.begin())
                    S.insert(--it1,x);
                else
                    S.insert(x), ok=0;
                if(ok)
                    M.insert(x-*it1);
                if(it2!=S.end())
                    M.insert(*it2-x);
                else
                    ok=0;
                if(ok)
                    M.insert(*it2-*it1);
            }
            if(A[0]=='S')
            {
                it1=it2=it=S.find(x);
                if(it1==S.end())
                {
                    printf("-1\n");
                    continue;
                }
                ok=1;
                if(it1!=S.begin())
                    M.erase(M.find(x-*(--it1)));
                else
                    ok=0;
                if(++it2!=S.end())
                    M.erase(M.find(*it2-x));
                else
                    ok=0;
                if(ok)
                    M.insert(*it2-*it1);
                S.erase(it);
            }
            if(A[0]=='C')
                printf("%d\n",S.count(x));
        }
        else
            if(A[1]=='A')
                printf("%d\n",*S.rbegin()-*S.begin());
            else
                printf("%d\n",*M.begin());
    return 0;
}