Cod sursa(job #775572)

Utilizator darrenRares Buhai darren Data 8 august 2012 15:33:47
Problema Zeap Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.93 kb
#include <cstdio>
#include <fstream>
#include <set>

using namespace std;

set<int> S;
multiset<int> D;
char opt[20];

inline int get()
{
	int number = 0;
	for (int i = 2; opt[i] >= '0' && opt[i] <= '9'; ++i)
		number = number * 10 + (opt[i] - '0');
	return number;
}

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

	while (gets(opt))
	{
		int num;	
		if (opt[0] == 'I')
		{
			num = get();
			set<int>::iterator it = S.find(num);
			if (it == S.end())
			{
				S.insert(num);
				
				set<int>::iterator itn = S.upper_bound(num);
				if (itn != S.end())
				{
					set<int>::iterator aux = itn;
					--aux;
					
					multiset<int>::iterator mnow = D.find(*itn - num);
					D.insert(*itn - num);
					
					if (aux == S.begin()) continue;
					--aux;
					mnow = D.find(*itn - *aux);
					D.erase(mnow);
				}
				--itn;
				if (itn == S.begin()) continue;
				--itn;
				D.insert(num - *itn);
			}
		}
		else if (opt[0] == 'S')
		{
			num = get();
			set<int>::iterator it = S.find(num);
			if (it == S.end()) printf("-1\n");
			else
			{
				S.erase(it);
				if (S.size() == 0) continue;
				
				set<int>::iterator itn = S.upper_bound(num);
				if (itn != S.end())
				{
					multiset<int>::iterator mnow = D.find(*itn - num);
					D.erase(mnow);
				}
				if (itn != S.begin())
				{
					--itn;
					multiset<int>::iterator mnow = D.find(num - *itn);
					D.erase(mnow);
					
					int auxv = *itn;
					++itn;
					if (itn != S.end())
						D.insert(*itn - auxv);
				}
			}
		}
		else if (opt[0] == 'C')
		{
			num = get();
			set<int>::iterator it = S.find(num);
			if (it == S.end()) printf("0\n");
			else               printf("1\n");
		}
		else if (opt[1] == 'A')
		{
			if (S.size() >= 2)
			{
				set<int>::iterator it = S.end();
				--it;
				
				printf("%d\n", *it - *S.begin());
			}
			else printf("-1\n");
		}
		else
		{
			if (S.size() >= 2) printf("%d\n", *D.begin());
			else               printf("-1\n");        
		}
	}
}