Pagini recente » Cod sursa (job #2894646) | Cod sursa (job #899143) | Cod sursa (job #2962219) | Cod sursa (job #2884335) | Cod sursa (job #162160)
Cod sursa(job #162160)
#include <cstdio>
#include <algorithm>
using namespace std;
struct partitie{long a;long b;};
long n,i,j,d,p,mx,x[300100],t[300100];
partitie v[300100];
bool cmp(partitie x, partitie y)
{
if (x.a<y.a)
return true;
else
return false;
}
int main(){
freopen("partitie.in","r",stdin);
freopen("partitie.out","w",stdout);
scanf("%d%d",&n,&d);
for (i=1;i<=n;i++)
{
scanf("%d",&v[i].a);
v[i].b=i;
}
sort(v+1,v+n+1,cmp);
j=1;
while (v[j].a-v[1].a<d)
++j;
mx=j-1;
p=1;
j--;
for (i=2;i<=n;i++)
{
while (v[j].a-v[i].a<d&&j<=n)
j++;
j--;
if (j-i+1>mx)
{
mx=j-i+1;
p=i;
}
}
printf("%d\n",mx);
for (i=p;i<=n;i++)
x[i]=(i-p)%mx+1;
d=mx;
for (i=p-1;i>=1;i--)
{
x[i]=d;
d--;
if (d<1)
d=mx;
}
for (i=1;i<=n;i++)
t[v[i].b]=x[i];
for (i=1;i<=n;i++)
printf("%d\n",t[i]);
return 0;
}