Cod sursa(job #1401991)

Utilizator retrogradLucian Bicsi retrograd Data 26 martie 2015 11:35:10
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<fstream>
#include<algorithm>
#include<vector>
#include<queue>

using namespace std;
typedef int var;

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

#define MAXN 500001

vector<pair<var, var> >V;
#define mp make_pair
var COLOR[MAXN];
var LAST[MAXN];

typedef pair<var, var> pii;

struct cmp {
    const bool operator() (pii a, pii b) {
        return a>b;
    }
};

priority_queue<pii, vector<pii>, cmp> Q;

int main() {

    var n, d, val;
    fin>>n>>d;

    for(var i=1; i<=n; i++) {
        fin>>val;
        V.push_back(mp(val, i));
        LAST[i] = -2000000000;
    }
    sort(V.begin(), V.end());

    Q.push(mp(-2000000000, 1));

    var maxc = -1, cur_color;
    var colors = 1;
    for(auto v : V) {
        var val = v.first;
        var col;
        auto top = Q.top();
        if(val >= top.first + d) {
            Q.pop();
            Q.push(mp(val, top.second));
            COLOR[v.second] = top.second;
        } else {
            Q.push(mp(val, ++colors));
            COLOR[v.second] = colors;
        }
    }

    fout<<colors<<'\n';
    for(var i=1; i<=n; i++) {
        fout<<COLOR[i]<<'\n';
    }

    return 0;
}