Pagini recente » Cod sursa (job #2846600) | Cod sursa (job #830630) | Cod sursa (job #1714031) | Cod sursa (job #117539) | Cod sursa (job #125743)
Cod sursa(job #125743)
#include <cstdio>
#include <algorithm>
using namespace std;
int N, D, A[1<<19], o[1<<19], col[1<<19];
bool cmp( int a, int b )
{ return A[a] < A[b]; }
int main()
{
freopen("partitie.in", "r", stdin);
freopen("partitie.out", "w", stdout);
scanf("%d %d", &N, &D );
for( int i = 1; i <= N; i++ )
scanf("%d", A + i ),
o[i] = i;
sort( o + 1, o + N + 1, cmp );
// for( int i = 1; i <= N; i++ )
// printf("%d ", o[i] ); printf("\n");
int ls = 1, mv = 0, cur = 1;
for( int i = 2; i <= N; i++ )
if( A[ o[i] ] - A[ o[1] ] < D )
cur++,
ls = i;
mv = max( mv, cur );
for( int i = 2; i <= N; i++ )
{
cur--;
ls++;
while( ls < N && A[ o[ls] ] < A[ o[i] ] + D )
ls++, cur++;
mv = max( cur, mv );
}
printf("%d\n", mv );
ls = 1;
for( int i = 1; i <= N; i++ )
{
col[ o[i] ] = ls;
ls++;
if( ls > mv )
ls = 1;
}
for( int i = 1; i <= N; i++ )
printf("%d\n", col[i] );
return 0;
}