Cod sursa(job #251624)

Utilizator albuaAlbu Alexandru albua Data 2 februarie 2009 23:37:06
Problema Partitie Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>
#include <algorithm>
#define DMax 300009
#define DDMax 100000

using namespace std;

typedef struct
					{
					  long index, grupa,valoare;
					}element;
					
element a[DMax];
long n,dif,i,j,grupe,nrtot,ma;
long maxgr[DMax],ok,p;


void citire();
bool dupavaloare(element a, element b)
{
  return a.valoare<b.valoare;
}


int main()
{
	freopen("partitie.in","r",stdin);
	freopen("partitie.out","w",stdout);
	citire();
	sort(a+1,a+n+1,dupavaloare);
	p=1;
	while(nrtot<n)
		{
	    grupe++;
			ma=a[p].valoare;
			a[p].grupa=grupe;
			nrtot++;
			ok=0;
			for(i=p;i<=n;i++)
				if(a[i].grupa==0)
					if((a[i].valoare-ma)>=dif)
						{
							a[i].grupa=grupe;
							ma=a[i].valoare;
							nrtot++;
						}
					else
						if(!ok){ok=1;p=i;}
		}
	for(i=1;i<=n;i++)
		maxgr[a[i].index]=a[i].grupa;
	printf("%ld\n",grupe);
	for(i=1;i<=n;i++)
		printf("%ld\n",maxgr[i]);
  return 0;
}

void citire()
{
  scanf("%ld %ld\n",&n,&dif);
	for(int i=1;i<=n;i++)
		{
		  scanf("%ld\n",&a[i].valoare);
			a[i].index=i;
		}
}