Cod sursa(job #3365477)

Utilizator Teodor94Teodor Plop Teodor94 Data 21 septembrie 2026 14:08:04
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#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;
}