Cod sursa(job #3142014)

Utilizator al3x.unxUngureanu Alex al3x.unx Data 18 iulie 2023 12:54:43
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

ifstream fin("partitie.in");
ofstream fout("partitie.out");

vector<pair<int, int>> sir = {{0, 0}};
int sol_sir[300005] = {0};
int n, d;

bool isValid(int j, int i) { // verfica daca elementul j se potriveste cu elementul i
    return sol_sir[sir[j].second] == 0 && sir[j].first >= sir[i].first + d;
}

int main() {
    fin >> n >> d;

    for (int i = 1; i <= n; i++) {
        int a;
        fin >> a;
        sir.push_back({a, i});
    }

    sort(sir.begin(), sir.end());

    int j = 1, sol = 0;

    for (int i = 1; i <= n; i++) {
        if (sol_sir[sir[i].second] == 0) {
            sol++;
            sol_sir[sir[i].second] = sol;
        }

        while (j <= n && !isValid(j, i)) {
            j++;
        }

        if (j <= n) {
            sol_sir[sir[j].second] = sol_sir[sir[i].second];
        }
    }

    fout << sol << '\n';

    for (int i = 1; i <= n; i++) {
        fout << sol_sir[i] << '\n';
    }

    return 0;
}