Pagini recente » Cod sursa (job #1495694) | Cod sursa (job #2747354) | Cod sursa (job #368779) | Cod sursa (job #3248589) | Cod sursa (job #1493824)
#include <cstdio>
#include <algorithm>
#define DIM (1<<19)
#define f first
#define s second
using namespace std;
int N, K, D;
int F[DIM];
pair <int, int> V[DIM];
class InputReader {
public:
InputReader() {}
InputReader(const char *file_name) {
input_file = fopen(file_name, "r");
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
inline InputReader &operator >>(int &n) {
while(buffer[cursor] < '0' || buffer[cursor] > '9') {
advance();
}
n = 0;
while('0' <= buffer[cursor] && buffer[cursor] <= '9') {
n = n * 10 + buffer[cursor] - '0';
advance();
}
return *this;
}
private:
FILE *input_file;
static const int SIZE = 1 << 17;
int cursor;
char buffer[SIZE];
inline void advance() {
++ cursor;
if(cursor == SIZE) {
cursor = 0;
fread(buffer, SIZE, 1, input_file);
}
}
};
int main(){
//freopen("partitie.in" ,"r", stdin );
InputReader cin("partitie.in");
freopen("partitie.out","w", stdout);
//scanf("%d %d", &N, &D);
cin >> N >> D;
for(int i = 1; i <= N; i ++){
//scanf("%d", &V[i].f);
cin >> V[i].f;
V[i].s = i;
}
sort(V + 1, V + N + 1);
int p = 1, u = 1;
while(p <= N){
while(u <= N && V[u].f - V[p].f < D)
u ++;
K = max(K, u - p);
p ++;
}
int i = 1;
while(i <= N){
for(int j = 1; j <= K && i <= N; j ++, i ++)
F[V[i].s] = j;
}
printf("%d\n", K);
for(int i = 1; i <= N; i ++)
printf("%d\n", F[i]);
fclose(stdin );
fclose(stdout);
return 0;
}