Cod sursa(job #929353)

Utilizator raulstoinStoin Raul raulstoin Data 26 martie 2013 23:24:32
Problema Zeap Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<fstream>
#include<iostream>
#include<map>
#include<algorithm>
using namespace std;
ifstream fin("zeap.in");
ofstream fout("zeap.out");
map<int,bool> v;
char x[5];
int n;
int minim=(1<<30),sw=0;
map<int,bool>::iterator it1,it2,it3;
void min_find()
{
	minim=(1<<30);
	it1=v.begin();
	it2=it1++;
	for(;it1!=v.end();it1++,it2++)
		minim=min(minim,(*it1).first-(*it2).first);
}
int main()
{
	while(fin>>x)
	{
		if(x[0]=='I')
		{
			fin>>n;
			v.insert(pair<int,bool>(n,1));
			if(v.size()<3)
			{
				if(v.size()==2)
					min_find();
				continue;
			}
			it3=v.find(n);
			//if(it3!=v.end())
			{
				int d1=(1<<30),d2=(1<<30);
				it2=it3++;
				it1=--it2;
				it2++;
				if(it2!=v.begin())
					d1=(*it2).first-(*it1).first;
				if(it3!=v.end())
					d2=(*it3).first-(*it2).first;
				minim=min(minim,min(d1,d2));
			}
			continue;
		}
		if(x[0]=='S')
		{
			fin>>n;
			if(!v.erase(n))
				fout<<-1<<'\n';
			else
				min_find();
			continue;
		}
		if(x[0]=='M')
		{
			if(v.size()<2)
			{
				fout<<-1<<'\n';
				continue;
			}
			if(x[1]=='A')
			{
				it1=v.end();
				it1--;
				it2=v.begin();
				fout<<(*it1).first-(*it2).first<<'\n';
			}
			else
			{
				if(v.size()==2)
					min_find();
				fout<<minim<<'\n';
			}
			continue;
		}
		if(x[0]=='C')
		{
			fin>>n;
			fout<<(v.find(n)!=v.end())<<'\n';
		}
	}
	fin.close();
	fout.close();
	return 0;
}