Pagini recente » Cod sursa (job #3367280) | Cod sursa (job #3367286) | Cod sursa (job #3367290) | Cod sursa (job #3365382) | Cod sursa (job #3366197)
#include <algorithm>
#include <cstdio>
#include <utility>
#define MAXN 300000
typedef struct {
int val;
int *ptr;
} pair;
pair v[MAXN];
int rasp[MAXN];
void swap(int &a, int &b) {
int aux = a;
a = b;
b = aux;
}
void qsort(int st, int dr) {
int b = st, e = dr, mij = v[(st + dr) / 2].val;
while (v[b].val < mij)
b++;
while (v[e].val > mij)
e--;
while (b < e) {
std::swap(v[b], v[e]);
do
b++;
while (v[b].val < mij);
do
e--;
while (v[e].val > mij);
}
if (st < e)
qsort(st, e);
if (e + 1 < dr)
qsort(e + 1, dr);
}
int cautBin(int st, int dr, int e) {
int mij = (st + dr) / 2;
if (dr == st) {
if (v[dr].val == e)
return dr;
return -1;
}
if (v[mij].val >= e)
return cautBin(st, mij, e);
return cautBin(mij + 1, dr, e);
}
int main() {
FILE *fin, *fout;
fin = fopen("partitie.in", "r");
fout = fopen("partitie.out", "w");
int n, d, i, sum = 0, nrs;
fscanf(fin, "%d%d", &n, &d);
for (i = 0; i < n; i++) {
fscanf(fin, "%d", &v[i].val);
v[i].ptr = &rasp[i];
}
qsort(0, n - 1);
int j = 0, max = 0;
for (i = 0; i < n; i++) {
while (v[i].val - v[j++].val >= d)
;
j--;
max = std::max(i - j + 1, max);
}
fprintf(fout, "%d\n", max);
for (i = 0; i < n; i++)
*v[i].ptr = i % max + 1;
for (i = 0; i < n; i++)
fprintf(fout, "%d\n", rasp[i]);
return 0;
}