Cod sursa(job #1419153)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 14 aprilie 2015 20:37:31
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

const int Nmax = 300000 + 1;

struct Node
{
    int val;
    int mult;
};

pair<int,int> v[Nmax];
queue<Node> Q;
int sol[Nmax];
int N, D, K;

int main()
{
    ifstream in("partitie.in");
    ofstream out("partitie.out");

    in >> N >> D;

    for (int i = 1; i <= N; ++i)
    {
        in >> v[i].first;
        v[i].second = i;
    }

    sort(v + 1, v + N + 1);

    for (int i = 1; i <= N; ++i)
    {
        if (Q.size() && v[i].first - Q.front().val >= D)
        {
            Node a = Q.front();
            Q.pop();

            sol[ v[i].second ] = a.mult;
            Q.push({v[i].first, a.mult});
        }
        else
        {
            Q.push({v[i].first, ++K});
            sol[ v[i].second ] = K;
        }
    }

    out << K << "\n";

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

    return 0;
}