Cod sursa(job #180584)

Utilizator blasterzMircea Dima blasterz Data 17 aprilie 2008 11:15:34
Problema Zeap Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
using namespace std;
#include <set>
#include <multiset.h>
#include <cstdio>
#include <cstdlib>

set<int>a ;
multiset<int>dif;


int main()
{

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

    char ax[64];
    char *p;
    int v;
    
    set<int>::iterator it,it2,it3;
    multiset<int>::iterator It;

    while(!feof(stdin))
    {
	memset(ax, 0, sizeof(ax));
	gets(ax);
//	printf("%s\n", ax);
	

	if(ax[0]=='I')
	{
	   // printf("insert\n");
	    p=strtok(ax, " ");
	    p=strtok(0, " \n");
	    v=atoi(p);
	    if(a.size()<2){ a.insert(v); if(a.size()==2) { it=a.end();--it; dif.insert(*it-*a.begin());}}
	    else
	    {
		it=a.lower_bound(v);
		it2=it;
		if(it2!=a.begin())--it2;

		if(it!=a.end()) dif.insert((*it)-v);
		if(it2!=it) dif.insert(v-(*it2));

		a.insert(v);
	    }

	}
	else
	if(ax[0]=='S')
	{
//	    printf("delete\n");
	    p=strtok(ax, " ");
	    p=strtok(0, " \n");
	    v=atoi(p);

	    it=a.find(v);

	    if(it==a.end()) { printf("-1\n"); continue;}

	    it2=it;
	    ++it2;
	    it3=it;
	    if(it3!=a.begin())--it3;

	    
	    if(it2!=a.end()) 
	    {
		int t=*it2 - v;
		It=dif.find(t);
		dif.erase(It);
	    }

	    if(it3!=it)
	    {
		int t=v - *it3;
		It=dif.find(t);
		dif.erase(It);
	    }
	

	    if(it2!=a.end() && it3!=it)
		dif.insert(*it2 - *it3);

	    a.erase(v);

	
	}
	else
	if(ax[0]=='C')
	{
//	    printf("find\n");
	    p=strtok(ax, " ");
	    p=strtok(0, " \n");
	    v=atoi(p);

	    if(a.find(v) != a.end()) printf("1\n");
		else printf("0\n");
        }

	else

	if(ax[0]=='M' && ax[1]=='A' && ax[2]=='X')
	{
//	    printf("max\n");
	    if(a.size()<2) printf("-1\n");
	    else
	    {

		it=a.end();
		--it;
		it2=a.begin();
//		printf("da?\n");
		printf("%d\n", *it - *it2);
	    }

	}
	else
	if(ax[0]=='M' && ax[1]=='I' && ax[2]=='N')
	{
//	    printf("min\n");
	    printf("%d\n", *dif.begin());

	}
/*
	printf("___\n");	
	for(it=a.begin();it!=a.end();++it)printf("%d ", *it);
	printf("\n");
	for(It=dif.begin();It!=dif.end();++It)printf("%d ", *It);
	printf("\n");
	printf("____\n");

*/





    }

    return 0;
}