Cod sursa(job #125976)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 20 ianuarie 2008 22:29:16
Problema Partitie Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.8 kb
#include <stdio.h>
#include <stdlib.h>

int v[310000], ord[310000], n, d, a[310000];

int cmp(const void *a, const void *b)
{
	int x = *(int*)a, y = *(int*)b;
	return v[x] - v[y];
}

int main()
{
	freopen("partitie.in","r",stdin);
	freopen("partitie.out","w",stdout);

	int i, j, max = 0;

	scanf("%d %d", &n, &d);
	for (i = 0; i < n; i++) { scanf("%d",v + i); ord[i] = i;}

	qsort (ord, n, sizeof(int),cmp);

	for (i = 0; i < n; i++) a[i] = v[ord[i]];

	max = 1;


	for (i = 0; i < n; i++)
	{
		for (j = i + 1; a[j] - a[i] < d && j < n; j++);
		if (max < j - i)  max = j - i;
	}

	j = 1;
	for (i = 0; i < n; i++)
	{
		v[ord[i]] = j;
		j++;
		if (j == max + 1) j = 1;
	}
	printf("%d\n",max);

	for (i = 0; i < n; i++) printf("%d\n",v[i]);
	return 0;
}