Pagini recente » Cod sursa (job #780033) | Cod sursa (job #1042047) | Cod sursa (job #1440887) | Cod sursa (job #1253134) | Cod sursa (job #251624)
Cod sursa(job #251624)
#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;
}
}