Cod sursa(job #128037)

Utilizator a7893Nae Mihai a7893 Data 25 ianuarie 2008 22:23:50
Problema Partitie Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.84 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=1,k,poz;
	qsort(v+1,n,sizeof(v[0]),compare);
	poz=1;
	for(j=poz;j<=n;j++)
		if(v[j].x-v[poz].x<=d-1&&max<j-poz+1)
		{
			max=j-poz+1;
			poz=j;
		}
	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;
}
*/
#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=1,k,poz;
	qsort(v+1,n,sizeof(v[0]),compare);
	poz=1;
	for(i=poz;i<n;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;
				poz=j;
			}
	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;
}