Cod sursa(job #775577)

Utilizator darrenRares Buhai darren Data 8 august 2012 15:45:00
Problema Zeap Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <cstdio>
#include <fstream>
#include <map>
#include <set>

using namespace std;

set<int> S;
map<int, 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();
			if (S.find(num) == S.end())
			{
				S.insert(num);
				
				set<int>::iterator itn = S.upper_bound(num);
				if (itn != S.end())
				{
					set<int>::iterator aux = itn;
					--aux;
					
					++D[*itn - num];
					
					if (aux == S.begin()) continue;
					--aux;
					--D[*itn - *aux];
					if (D[*itn - *aux] == 0) D.erase(*itn - *aux);
				}
				--itn;
				if (itn == S.begin()) continue;
				--itn;
				++D[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())
				{
					--D[*itn - num];
					if (D[*itn - num] == 0) D.erase(*itn - num);
				}
				if (itn != S.begin())
				{
					--itn;
					--D[num - *itn];
					if (D[num - *itn] == 0) D.erase(num - *itn);
					
					int auxv = *itn;
					++itn;
					if (itn != S.end())
						++D[*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()->first);
			else               printf("-1\n");        
		}
	}
}