Pagini recente » Cod sursa (job #636238) | Cod sursa (job #1138764) | Cod sursa (job #224457) | Cod sursa (job #200057)
Cod sursa(job #200057)
#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 last[1<<18],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()
{
sort(v+1, v+N+1, comp );
FOR(i,1,N)
last[i] = -1<<30;
last[0] = 1;
FOR(i,1,N)
{
int ok=0;
FOR(j,1,last[0])
if(v[i].n - last[j] >= D)
{
ok = 1;
last[j] = v[i].n;
sol[ v[i].p ] = j;
break;
}
if(!ok)
{
last[ ++last[0] ] = v[i].n;
sol[ v[i].p ] = last[0];
}
}
printf("%d\n", last[0]);
FOR(i,1,N-1)
printf("%d\n", sol[i]);
printf("%d\n", sol[N]);
}
int main()
{
scan();
solve();
return 0;
}