Cod sursa(job #1490987)

Utilizator dobrebogdanDobre Bogdan Mihai dobrebogdan Data 24 septembrie 2015 16:27:57
Problema Zeap Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.49 kb
#include<cstdio>
#include<cstring>
#include<set>
using namespace std;
char si[20];
struct sp
{
    int x,y;
    bool operator < (const sp & other) const
    {
        return y-x<other.y-other.x;
    }
};
set<int> s1;
set<sp> s2;
int main()
{
    freopen("zeap.in","r",stdin);
    freopen("zeap.out","w",stdout);
    set<int> :: iterator it,i2;
    set<sp> :: iterator da;
    int x,i,n,pa;
    sp tm;
    pa=0;
    while(gets(si+1))
    {
        pa++;
        n=strlen(si+1);
        if(si[1]=='I')
        {
            x=0;
            for(i=3; i<=n; i++)
                x=x*10+si[i]-'0';
            s1.insert(x);
            it=s1.find(x);
            i2=it;
            i2++;
            if(i2!=s1.end())
            {
                tm.x=(*it);
                tm.y=(*i2);
                s2.insert(tm);
            }
            i2=it;
            i2--;
            if(it!=s1.begin())
            {
                tm.x=(*i2);
                tm.y=(*it);
                s2.insert(tm);
            }
        }
        else if(si[1]=='S')
        {
            x=0;
            for(i=3; i<=n; i++)
                x=x*10+si[i]-'0';
            it=s1.find(x);
            if(it!=s1.end())
            {
                i2=it;
                i2++;
                it--;
                tm.x=(*it);
                tm.y=(*i2);
                s2.insert(tm);
                s1.erase(x);
            }
            else
                printf("-1\n");
        }
        else if(si[1]=='C')
        {
            x=0;
            for(i=3; i<=n; i++)
                x=x*10+si[i]-'0';
            if(s1.find(x)!=s1.end())
                printf("1\n");
            else
                printf("0\n");
        }
        else if(si[2]=='A')
        {
            it=s1.begin();
            i2=s1.end();
            i2--;
            if((*it)==(*i2))
                printf("-1\n");
            else
                printf("%d\n",(*i2)-(*it));
        }
        else if(si[2]=='I')
        {
            while(!s2.empty())
            {
                da=s2.begin();
                tm=(*da);
                if(s1.find(tm.x)!=s1.end() && s1.find(tm.y)!=s1.end())
                {
                    printf("%d\n",tm.y-tm.x);
                    break;
                }
                else
                    s2.erase(tm);
            }
            if(s2.empty())
                printf("-1\n");
        }
    }
    return 0;
}