Cod sursa(job #727584)

Utilizator fhandreiAndrei Hareza fhandrei Data 28 martie 2012 09:19:39
Problema Partitie Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
//Include
#include <fstream>
#include <set>
#include <vector>
#include <map>
using namespace std;

//Constante
const int oo = (int)15e8;

//Variabile
ifstream in("partitie.in");
ofstream out("partitie.out");

int n, dif;
int citit;
int nrMultimi;
int oldVal;

set<int> multime;
set<int>::iterator it, end, bound;

vector<int> oldOrder;
vector<int>::iterator vIt, vEnd;
map<int, int> pozitii;

//Main
int main()
{
	in >> n >> dif;
	oldOrder.reserve(n);
	for(int i=1 ; i<=n ; ++i)
	{
		in >> citit;
		multime.insert(citit);
		oldOrder.push_back(citit);
	}
	
	end = multime.end();
	for( nrMultimi=1; !multime.empty() ; ++nrMultimi)
	{
		oldVal = -oo;
		while((bound = multime.lower_bound(oldVal+dif)) != end)
		{
			oldVal = *bound;
			pozitii[*bound] = nrMultimi;
			multime.erase(bound);
		}
	}
	
	out << (nrMultimi-1) << '\n';
	vEnd = oldOrder.end();
	for(vIt=oldOrder.begin() ; vIt!=vEnd ; ++vIt)
		out << pozitii[*vIt] << '\n';
	
	in.close();
	out.close();
	return 0;
}