Cod sursa(job #128024)

Utilizator a7893Nae Mihai a7893 Data 25 ianuarie 2008 21:28:57
Problema Partitie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<stdio.h>
#include<stdlib.h>
#define N 300001
int n,d;
struct vec{
	int x,poz,part;
}v[N];
void read()
{
	int i;
	scanf("%d%d",&n,&d);
	for(i=1;i<=n;i++)
	{
		scanf("%d",&v[i].x);
		v[i].poz=i;
	}
}
int compare(const void *a,const void *b)
{
	vec *aa=(vec*)a,*bb=(vec*)b;
	return aa->x-bb->x;
}
int compare2(const void *a,const void *b)
{
	vec *aa=(vec*)a,*bb=(vec*)b;
	return aa->poz-bb->poz;
}
void solve()
{
	int i,j,max=0,k;
	qsort(v+1,n,sizeof(v[0]),compare);
	for(i=1;i<=n-d;i++)
		for(j=i+1;j<=n;j++)
			if(v[j].x-v[i].x<=d-1&&max<j-i+1)
				max=j-i+1;
	printf("%d\n",max);
	k=1;
	for(i=1;i<=n;i++)
	{
		if(k>max)
			k=1;
		v[i].part=k++;
	}		
	qsort(v+1,n,sizeof(v[0]),compare2);
	for(i=1;i<=n;i++)
		printf("%d\n",v[i].part);
}
int main()
{
	freopen("partitie.in","r",stdin);
	freopen("partitie.out","w",stdout);
	read();
	solve();
	return 0;
}