Cod sursa(job #124933)

Utilizator za_wolfpalianos cristian za_wolf Data 20 ianuarie 2008 10:22:10
Problema Partitie Scor 40
Compilator cpp Status done
Runda preONI 2008, Runda 3, Clasa a 10-a Marime 0.8 kb
#include<stdio.h>
#define NMAX 20005
long poz,x[NMAX],p[NMAX],i,j,n,m,k,l,a,s,jj,y[NMAX],rez[NMAX];
int main()
{
	freopen("partitie.in","r",stdin);
	freopen("partitie.out","w",stdout);
	scanf("%ld%ld",&n,&k);
	for (i=1;i<=n;i++)
	{
		scanf("%ld",&x[i]);
		y[i]=i;
	}
	a=1;
	m=n;
	while (a)
	{
		a=0;
		for (i=1;i<m;i++)
			if (x[i]>x[i+1]) {a=x[i]; x[i]=x[i+1]; x[i+1]=a; a=y[i]; y[i]=y[i+1];y[i+1]=a; a=1;}
		m--;
	}
	p[1]=x[1];
	m=1;
	poz=1;
	rez[y[1]]=1;
	for (i=2;i<=n;i++)
	{
		a=0;
		s=-10000000;
		jj=-1;
		for (j=1;j<=m;j++)
			if (p[j]+k<=x[i]&&s<p[j]) {jj=j;s=p[j];}
		if (jj!=-1)
		{
			rez[y[i]]=jj;
			p[jj]=x[i];
		}
		else
		{
			m++;
			p[m]=x[i];
			rez[y[i]]=m;
		}
	}
	printf("%ld\n",m);
	for (i=1;i<=n;i++)
	printf("%ld\n",rez[i]);

	return 0;
}