Pagini recente » Cod sursa (job #541988) | Cod sursa (job #3262957) | Cod sursa (job #2206349) | Cod sursa (job #3207275) | Cod sursa (job #250783)
Cod sursa(job #250783)
#include <cstdio>
#include <algorithm>
#define lm 300010
using namespace std;
struct vec
{
int x, y;
} v[lm];
int a[lm], c[lm], n, d;
bool cmp(vec a, vec b)
{
return (a.x<b.x);
}
bool cmp2(vec a, vec b)
{
return (a.y<b.y);
}
int main()
{
freopen("partitie.in","r",stdin);
freopen("partitie.out","w",stdout);
scanf("%ld %ld",&n,&d);
int i,k;
for (i=1; i<=n; i++) scanf("%ld",&v[i].x);
for (i=1; i<=n; i++) v[i].y=i;
sort(v+1, v+n+1, cmp);
c[1]=v[1].x;
int st=1;
int dr=1;
k=1;
a[1]=1;
for (i=2; i<=n; i++)
{
c[1+dr++]=v[i].x;
if (v[i].x-c[st]>=d)
{
a[i]=a[st++];
} else
a[i]=1+k++;
}
for (i=1; i<=n; i++) v[i].x=a[i];
sort(v+1, v+n+1, cmp2);
printf("%d\n",k);
for (i=1; i<=n; i++) printf("%ld\n",v[i].x);
}