Pagini recente » Cod sursa (job #2213472) | Cod sursa (job #161352) | Cod sursa (job #1436067) | Cod sursa (job #2376974) | Cod sursa (job #128157)
Cod sursa(job #128157)
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;
#define in "partitie.in"
#define out "partitie.out"
#define dim 300002
int N, D;
int A[dim], B[dim], P[dim], H[dim];
bool cmp(int i, int j)
{
return B[i] < B[j];
}
void Qsort(int,int);
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d%d", &N, &D);
for ( int i = 1; i <= N; i++ )
scanf("%d", &B[i]), P[i] = i;
//Qsort(1,N);
sort(P+1,P+N+1,cmp);
for ( int i = 1; i <= N; i++ )
A[i] = B[P[i]];
int Smax = 0;
for ( int i = 1, j = 2; i <= N; i++ )
{
if ( j == N )
{
if ( j - i > Smax ) Smax = j - i;
continue;
}
while ( A[j] - A[i] < D && j <= N ) j++;
if ( j - i > Smax ) Smax = j - i;
}
for ( int i = 1; i <= N; i++ )
{
H[P[i]] = i%Smax+1;
}
printf("%d\n", Smax);
for ( int i = 1; i <= N; i++ )
printf("%d\n", H[i]);
}
void Qsort(int st, int dr)
{
int i = st-1, j = dr+1, pivot = A[st];
while ( i <= j )
{
do { ++i; } while ( A[i] < pivot );
do { --j; } while ( A[j] > pivot );
if ( i < j )
{
int aux;
aux = A[i], A[i] = A[j], A[j] = aux;
aux = P[i], P[i] = P[j], P[j] = aux;
}
}
if ( j > st ) Qsort(st,j);
if ( i < dr ) Qsort(i,dr);
}