Cod sursa(job #180244)

Utilizator mihai0110Bivol Mihai mihai0110 Data 16 aprilie 2008 19:51:42
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>
#include<algorithm>
#define MAXN 300001


using namespace std;

struct element{long a,nr;} v[MAXN];

long n,i,j,maxsol,d,maxd,x;
long sol[MAXN];

bool comp(const element &a, const element &b)
{
 return a.a<b.a; 
}
int main(void)
	{
	freopen("partitie.in","r",stdin);
	freopen("partitie.out","w",stdout);
	scanf("%ld%ld",&n,&d);
	for(i=1;i<=n;i++)
		{
		scanf("%ld",&v[i].a);
		v[i].nr=i;
		}
	sort(v+1,v+n+1,comp);
	maxd=2;
	for(i=1;i<=n;i++)
	{
		j=maxd;
		while(v[j].a-d<v[i].a&&j<=n)
			j++;
		if(j-i>maxsol)
		maxsol=j-i;
		maxd=j;
	}

printf("%ld\n",maxsol);

for(i=1,x=1;i<=n;i++,x++)
	{
		if(x>maxsol)
			x-=maxsol;
		sol[v[i].nr]=x;
	}
for(i=1;i<=n;i++)
printf("%ld\n",sol[i]);
return 0;
}