Cod sursa(job #3177050)

Utilizator stefan_dore_Stefan Dore stefan_dore_ Data 28 noiembrie 2023 13:02:01
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

ifstream f ("partitie.in");
ofstream g ("partitie.out");

const int NMAX = 300000;
int n, d, part[NMAX+1], nrp, j;

struct numar {
    int val, poz;
};

numar v[NMAX+1];

bool cmp(numar a, numar b) {
    return b.val > a.val;
}

bool ok(int i, int j) {
   return !(part[v[j].poz] == 0 && v[j].val - d >= v[i].val) && j <= n;
}

int main()
{
    f >> n >> d;
    for (int i=1; i<=n; i++) {
        f >> v[i].val;
        v[i].poz = i;
    }
    sort(v+1, v+n+1, cmp);
    for (int i=1; i<=n; i++) {
        if(part[v[i].poz] == 0) {
            nrp++;
            part[v[i].poz]= nrp;
        }
        while (ok(i, j))
            j++;
        if (j <= n)
            part[v[j].poz] = part[v[i].poz];
    }
    g << nrp << '\n';
    for(int i=1; i<=n; i++)
        g << part[i] << '\n';
    return 0;
}