Pagini recente » Cod sursa (job #1142934) | Cod sursa (job #3245963) | Cod sursa (job #2865210) | Cod sursa (job #146718) | Cod sursa (job #120833)
Cod sursa(job #120833)
#include <cstdio>
#include <cassert>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
#define MAXN 300100
#define pb push_back
#define mp make_pair
#define x first
#define y second
#define PII pair<int, int>
int N, D, K;
vector< PII > A;
int B[MAXN];
void solve(void)
{
int i, j, k, t, ind, last, len = -1;
sort(A.begin(), A.end());
for(i = j = 0; i < N; i++)
{
for(; j <= N && A[j].x-A[i].x < D; j++) ; j--;
if(j-i+1 > len) len = j-i+1, ind = i, last = j;
}
for(K = len, k = 0, i = ind; i < N; i++, k++) B[A[i].y] = k%len;
for(k = 0, i = ind-1; i >= 0; i--, k++) B[A[i].y]=(len-1+k)%len;
}
void read_data(void)
{
int i, j;
scanf("%d %d\n", &N, &D);
assert(N >= 1 && N <= 300000);
assert(D >= 1 && D <= 1000000000);
for(i = 1; i <= N; i++)
scanf("%d ", &j), assert(j >= 1 && j <= 1000000000),
A.pb( mp(j,i) );
}
void write_data(void)
{
int i;
printf("%d\n", K);
for(i = 1; i <= N; i++)
printf("%d\n", B[i]+1);
}
int main(void)
{
freopen("partitie.in", "rt", stdin);
freopen("partitie.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}