Cod sursa(job #124907)

Utilizator slayer4uVictor Popescu slayer4u Data 20 ianuarie 2008 10:07:48
Problema Partitie Scor 70
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 9-a Marime 0.81 kb
#include <stdio.h>
#include <algorithm>
using namespace std;

long i, n, d, k, j, partitii, v[300010];

struct lol
{
	long n, p;
};
lol x[300010], part[300010];

int cmpf(const lol a, const lol b)
{
	return a.n < b.n;
}

int main()
{
	freopen ("partitie.in", "rt", stdin);
	freopen ("partitie.out", "wt", stdout);

	scanf("%ld %ld", &n, &d);
	for (i = 1; i <= n; i ++)
	{
		scanf("%ld", &x[i].n);
		x[i].p = i;
	}

	sort(x + 1, x + n + 1, cmpf);

	for (i = 1; i <= n; i ++)	
	{
		k = 0;
		for (j = 1; j <= partitii && !k; j ++)
		{
			if (x[i].n - part[j].n >= d)
				part[j].n = x[i].n, v[x[i].p] = j, k = 1;
		}
		if (k == 0)
			part[++ partitii].n = x[i].n, v[x[i].p] = partitii;
	}

	printf("%ld\n", partitii);
	for (i = 1; i <= n; i ++)
		printf("%ld\n", v[i]);

	return 0;
}