Pagini recente » Cod sursa (job #2277) | Cod sursa (job #1361189) | Cod sursa (job #2899477) | Cod sursa (job #2298966) | Cod sursa (job #377940)
Cod sursa(job #377940)
#include <algorithm>
using namespace std;
#define DIM 300005
struct numar {int x,c,in;} v[DIM];
int n,d,nrc,ind;
void read ()
{
int i;
scanf ("%d%d",&n,&d);
for (i=1; i<=n; ++i)
{
scanf ("%d",&v[i].x);
v[i].in=i;
}
}
inline int cmp1 (const numar &a,const numar &b)
{
return a.x<b.x;
}
inline int cmp2 (const numar &a,const numar &b)
{
return a.in<b.in;
}
void solve ()
{
int i,j;
sort (v+1,v+n+1,cmp1);
for (i=j=1; j<=n; ++i)
{
for ( ; v[j+1].x-v[i].x<=d && j<=n; ++j);
if (j-i>nrc)
{
nrc=j-i;
ind=i;
}
}
for (i=ind, j=0; i<=n; ++i, j=(j+1)%nrc)
v[i].c=j+1;
for (i=ind-1, j=nrc-1; i>=1; --i, j=(j-1+nrc)%nrc)
v[i].c=j+1;
sort (v+1,v+n+1,cmp2);
}
void print ()
{
int i;
printf ("%d\n",nrc);
for (i=1; i<=n; ++i)
printf ("%d\n",v[i].c);
}
int main ()
{
freopen ("partitie.in","r",stdin);
freopen ("partitie.out","w",stdout);
read ();
solve ();
print ();
return 0;
}