Cod sursa(job #126371)

Utilizator ScrazyRobert Szasz Scrazy Data 21 ianuarie 2008 22:46:19
Problema Partitie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <algorithm>
#define MMax 300010
using namespace std;

struct nod {long ind; long val; };
nod m[MMax];
long d, n, maxx;
long a[MMax];

int cmp(nod a, nod b)
{
    return a.val<b.val;
}

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

    long i, j;
    scanf("%ld %ld", &n, &d);
    for (i=1; i<=n; ++i)
    {
	scanf("%ld", &m[i].val);
	m[i].ind=i;
    }

    sort(m+1,m+n+1, cmp); 

    for (i=1; i<=n;)
    {
	for (j=i; j<=n && m[j].val-m[i].val<=d-1; ++j);
	if (maxx<(j-i)) maxx=j-i;
	i=j;
    } 

    printf("%ld\n", maxx); 
    int maxy=1;
    for (i=1; i<=n; ++i)
    {
	a[m[i].ind]=maxy;
	++maxy;
	if (maxy>maxx) maxy=1;
    }

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

    fclose(stdin);
    fclose(stdout);

    return 0;
}