Cod sursa(job #250783)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 31 ianuarie 2009 20:26:34
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>
#include <algorithm>
#define lm 300010
using namespace std;

struct vec
{
	int x, y;
} v[lm];
int a[lm], c[lm], n, d;

bool cmp(vec a, vec b)
{
	return (a.x<b.x);
}

bool cmp2(vec a, vec b)
{
    return (a.y<b.y);
}

int main()
{
    freopen("partitie.in","r",stdin);
	freopen("partitie.out","w",stdout);
	scanf("%ld %ld",&n,&d);
	int i,k;
	for (i=1; i<=n; i++) scanf("%ld",&v[i].x);
	for (i=1; i<=n; i++) v[i].y=i;
	sort(v+1, v+n+1, cmp);
	c[1]=v[1].x;
	int st=1;
	int dr=1;
	k=1;
	a[1]=1;
	for (i=2; i<=n; i++)
	{
		c[1+dr++]=v[i].x;
		if (v[i].x-c[st]>=d)
		{
			a[i]=a[st++];
        } else
			a[i]=1+k++;
    }
	for (i=1; i<=n; i++) v[i].x=a[i];
	sort(v+1, v+n+1, cmp2);
	printf("%d\n",k);
	for (i=1; i<=n; i++) printf("%ld\n",v[i].x);
}