Cod sursa(job #728080)

Utilizator fhandreiAndrei Hareza fhandrei Data 28 martie 2012 14:42:26
Problema Partitie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
//Include
#include <cstdio>
#include <set>
#include <vector>
#include <map>
using namespace std;

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

//Variabile
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()
{
	freopen(".in", "rt", stdin);
	freopen(".out", "wt", stdout);
	
	//in >> n >> dif;
	scanf("%d%d", &n, &dif);
	oldOrder.reserve(n);
	for(int i=1 ; i<=n ; ++i)
	{
		//in >> citit;
		scanf("%d", &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';
	printf("%d\n", nrMultimi-1);
	vEnd = oldOrder.end();
	for(vIt=oldOrder.begin() ; vIt!=vEnd ; ++vIt)
		//out << pozitii[*vIt] << '\n';
		printf("%d\n", pozitii[*vIt);
	
	fclose(stdin);
	fclose(stdout);
	return 0;
}