Pagini recente » Cod sursa (job #1602331) | Cod sursa (job #3202043) | Cod sursa (job #1021837) | Cod sursa (job #227729) | Cod sursa (job #200058)
Cod sursa(job #200058)
#include <cstdio>
#include <algorithm>
#define IN "partitie.in"
#define OUT "partitie.out"
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define N_MAX 300011
using namespace std;
int sol[N_MAX];
struct nr{int n,p;};
nr v[N_MAX];
int N,D;
void scan()
{
freopen(IN, "r",stdin);
freopen(OUT, "w",stdout);
scanf("%d%d", &N,&D);
FOR(i,1,N)
{
scanf("%d", &v[i].n);
v[i].p = i;
}
}
inline int comp(const nr &x,const nr &y)
{
return x.n < y.n;
}
void solve()
{
int max = 0;
sort(v+1, v+N+1, comp );
int k1=0,k2=1;
while(k2 < N)
{
++k2;
++k1;
while(v[k2].n - v[k1].n < D && k2 < N)
++k2;
if(v[k2].n - v[k1].n >= D)
--k2;
if(k2 - k1 + 1 > max)
max = k2 - k1 + 1;
}
printf("%d\n", max);
FOR(i,1,N)
{
FOR(j,1,max)
{
sol[ v[i].p ] = j;
++i;
}
--i;
}
FOR(i,1,N)
printf("%d\n",sol[i]);
}
int main()
{
scan();
solve();
return 0;
}