Cod sursa(job #51226)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 10 aprilie 2007 14:15:21
Problema Zeap Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.08 kb
#include <stdio.h>
#include <set>

using namespace std;

set<int> T;
multiset<int> D;
char S[22];
int N;

void scrie()
{
        set<int>::iterator i;
        printf("--->");
        for (i = D.begin(); i != D.end(); i++)
            printf("%d ", *i);
        printf("\n");
}

int main()
{
        set<int> :: iterator p, t;
        int i, j, a, x, n = 0;

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

        while (gets(S))
        {
                if (S[0] == 'I')
                {
                        a = 0;
                        for (i = 2; i < strlen(S); i++) a = a*10+S[i]-48;
                        T.insert(a);
                        p = T.find(a);
                        N += (p!=T.end());
                        if (n < N)
                        {
                           t = p;
                           i = *(--T.end());
                           if (a < i) {i = *(++p); D.insert(abs(i-a)); /*scrie();*/}
                           i = *T.begin();
                           if (a > i) {i = *(--t); D.insert(abs(i-a)); /*scrie();*/}
                        }
                }
                else
                    if (S[0] == 'S')
                    {
                        a = 0;
                        for (i = 2; i < strlen(S); i++) a = a*10+S[i]-48;
                        p = T.find(a);
                        if (p != T.end())
                        {
                           x = *(--T.end());
                           t = p;
                           if (a < x) {i = *(++p); D.erase(D.find(abs(i-a))); /*scire();*/}
                           x = *T.begin();
                           if (a > x) {j = *(--t); D.erase(D.find(abs(j-a))); /*scire();*/}
                           T.erase(a);
                           N--;
                           D.insert(abs(i-j));
                        }
                        else printf("-1\n");
                    }
                    else
                        if (S[0] == 'C')
                        {
                                a = 0;
                                for (i = 2; i < strlen(S); i++) a = a*10+S[i]-48;
                                printf("%d\n", (T.find(a) != T.end()));
                        }
                        else
                            if (S[0] == 'M' && S[1] == 'I')
                            {
                                a = *D.begin();
                                if (N > 1) printf("%d\n", a);
                                else printf("-1\n");
                            }
                            else
                            {
                                if (N > 1)
                                {
                                   p = T.end();
                                   a = *(--p)-*T.begin();
                                   printf("%d\n", a);
                                }
                                else printf("-1\n");
                            }
                n = N;
        }

        return 0;
        
}