Pagini recente » Cod sursa (job #1594410) | Cod sursa (job #2822495) | Cod sursa (job #2660930) | Cod sursa (job #2470312) | Cod sursa (job #1780462)
#include <cstdio>
#include <algorithm>
#define NMax 300000
using namespace std;
struct part{ int o,v; };
part deque[NMax+1];
part elem[NMax+1];
int o[NMax+1];
bool cmp(const part A, const part B)
{
return A.v<B.v;
}
int main(){
freopen("partitie.in","r",stdin);
freopen("partitie.out","w",stdout);
int i,N,D,x,inc,sf,t;
scanf("%d %d",&N,&D);
for(i = 1; i <= N; ++i)
{
scanf("%d",&x);
elem[i].v = x;
elem[i].o = i;
}
sort(elem+1,elem+N+1,cmp);
inc = sf = 0;
deque[0].v = elem[1].v;
deque[0].o = 1;
o[ elem[1].o ] = 1;
for(t = 1, i = 2; i <= N; ++i)
{
if( elem[i].v - deque[inc].v >= D )
{
deque[++sf].v = elem[i].v;
deque[sf].o = deque[inc].o;
++inc;
}
else
{
deque[++sf].v = elem[i].v;
deque[sf].o = ++t;
}
o[ elem[i].o ] = deque[sf].o;
}
printf("%d\n",sf-inc+1);
for(i = 1; i <= N; ++i) printf("%d\n",o[i]);
return 0;
}