Cod sursa(job #473000)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 27 iulie 2010 16:28:39
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>

#include <algorithm>

using namespace std;

int n, d, sol;
int v[300002], o[300002], c[300002];

inline int cmp (int i, int j) {return v[i] < v[j];}

int main ()
{
	freopen ("partitie.in", "r", stdin);
	freopen ("partitie.out", "w", stdout);
	
	scanf ("%d %d", &n, &d);
	d --;
	
	int i, j;
	
	for (i = 1; i <= n; i ++)
	{
		scanf ("%d", &v[i]);
		o[i] = i;
	}
	
	sort (o + 1, o + n + 1, cmp);
	
	j = 1;
	for (i = 1; i <= n; i ++)
	{
		while (j <= n && v[o[j]] - v[o[i]] <= d)
			j ++;
		j --;
		
		if (j - i + 1> sol)
			sol = j - i + 1;
	}
	
	printf ("%d\n", sol);
	
	for (i = 1; i <= n; i ++)
		c[o[i]] = i % sol + 1;
	
	for (i = 1; i <= n; i ++)
		printf ("%d\n", c[i]);
	
	return 0;
}