Cod sursa(job #1489437)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 21 septembrie 2015 09:48:22
Problema Partitie Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <set>
#include <algorithm>

using namespace std;

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

const int MAX_N = 300000;

struct Element {
    int val;
    int ind;
};

struct Group {
    int th;
    int ind;
} gAux;

class GroupCompare {
public:
    bool operator ()(Group A, Group B) {
        return A.th < B.th;
    }
};

bool elSort(Element A, Element B) {
    return A.val < B.val;
}

set < Group, GroupCompare > s;
int nGroup;
Element V[MAX_N + 1];
int Sol[MAX_N + 1];

int main() {
    int n, d, i, th;

    in >> n >> d;
    for(i = 1; i <= n; i++) {
        in >> V[i].val;
        V[i].ind = i;
    }
    sort(V+1, V+n+1, elSort);

    nGroup = 1;
    s.insert({V[1].val + d, 1});
    Sol[V[1].ind] = 1;

    for(i = 2; i <= n; i++) {
        gAux = *s.begin();
        if(V[i].val < gAux.th) {
            nGroup++;
            s.insert({V[i].val + d, nGroup});
            Sol[V[i].ind] = nGroup;
        }
        else {
            s.erase(s.begin());
            Sol[V[i].ind] = gAux.ind;
            s.insert({V[i].val + d, gAux.ind});
        }
    }

    out << s.size() << '\n';
    for(i = 1; i <= n; i++) {
        out << Sol[i] << '\n';
    }

    return 0;
}