Pagini recente » Borderou de evaluare (job #3365715) | Borderou de evaluare (job #3365695) | Borderou de evaluare (job #3368521) | Cod sursa (job #3365720) | Cod sursa (job #3365477)
#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
#define MAX_N 300000
struct Number {
int value, index;
};
bool cmp(const Number& n1, const Number& n2) { return n1.value < n2.value; }
Number v[MAX_N];
int subset[MAX_N];
int main() {
FILE *fin, *fout;
fin = fopen("partitie.in", "r");
fout = fopen("partitie.out", "w");
int n, d, i, j, noSubsets;
fscanf(fin, "%d%d", &n, &d);
for (i = 0; i < n; ++i) {
fscanf(fin, "%d", &v[i].value);
v[i].index = i;
}
sort(v, v + n, cmp);
// Calculam noSubsets - numarul maxim de elemente dintr-o fereastra [v[i], v[i] + d)
noSubsets = 0;
j = 1;
for (i = 0; i < n; ++i) {
while (j < n && v[j].value - v[i].value < d)
++j;
noSubsets = max(noSubsets, j - i);
}
// Atribuim elementele in seturi
for (i = 0; i < n; ++i)
subset[v[i].index] = i % noSubsets;
fprintf(fout, "%d\n", noSubsets);
for (i = 0; i < n; ++i)
fprintf(fout, "%d\n", subset[i] + 1);
fclose(fin);
fclose(fout);
return 0;
}