Cod sursa(job #930761)

Utilizator a_h1926Heidelbacher Andrei a_h1926 Data 27 martie 2013 20:05:22
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <algorithm>

#define value first
#define index second

using namespace std;

const int MAX_N = 300005;

int N, MinDiff, SetIndex[MAX_N];
pair<int, int> Set[MAX_N];

void Solve() {
    sort(Set + 1, Set + N + 1);
    for (int i = 1, j = 1; i <= N; ++i) {
        if (SetIndex[Set[i].index] == 0)
            SetIndex[Set[i].index] = ++SetIndex[0];
        for (; j <= N && (SetIndex[Set[j].index] != 0 || Set[j].value - Set[i].value < MinDiff); ++j);
        if (j <= N)
            SetIndex[Set[j].index] = SetIndex[Set[i].index];
    }
}

void Read() {
    ifstream in("partitie.in");
    in >> N >> MinDiff;
    for (int i = 1; i <= N; ++i) {
        in >> Set[i].value;
        Set[i].index = i;
    }
    in.close();
}

void Print() {
    ofstream out("partitie.out");
    out << SetIndex[0] << "\n";
    for (int i = 1; i <= N; ++i)
        out << SetIndex[i] << "\n";
    out.close();
}

int main() {
    Read();
    Solve();
    Print();
    return 0;
}