Cod sursa(job #243878)

Utilizator MariusMarius Stroe Marius Data 14 ianuarie 2009 10:24:42
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

const char iname[] = "partitie.in";
const char oname[] = "partitie.out";

vector <pair <int, int> > sir;
vector <int> idx;

#define Max(a, b) ((a) > (b) ? (a) : (b))

int main(void)
{
    ifstream in(iname);
    ofstream out(oname);
    int N, D, val;

    in >> N >> D;
    for (int i = 0; i < N; ++ i) {
        in >> val;
        sir.push_back( make_pair(val, i) );
    }
    sort(sir.begin(), sir.end());
    int i = 0, j = 0;
    int res = 0;
    while (i < N) {
        while (j < N - 1 && sir[j + 1].first - sir[i].first < D)
            j ++;
        res = Max(res, j-i+1);
        i ++;
    }
    idx.resize(N);
    for (int i = 0; i < N; ++ i)
        idx[sir[i].second] = i % res;

    out << res << "\n";
    for (int i = 0; i < N; ++ i)
        out << idx[i] + 1 << "\n";

    in.close(), out.close();
    return 0;
}