Pagini recente » Cod sursa (job #2921999) | Borderou de evaluare (job #2041128) | Clasamentul arhivei de probleme | Cod sursa (job #2985135) | Cod sursa (job #2501176)
#include <iostream>
#include <algorithm>
#include <fstream>
using namespace std;
ifstream in("partitie.in");
ofstream out("partitie.out");
int n, d, ans;
struct elem {
int val, i, multime;
};
elem v[300005];
int main()
{
in >> n >> d;
for (int i = 1; i <= n; i++)
{
in >> v[i].val;
v[i].i = i;
v[i].multime = -1;
}
sort(v + 1, v + n + 1, [](const elem& l, const elem& r) { return l.val < r.val; });
int nextElem = 1;
for (int i = 1; i <= n; i++)
{
while (nextElem <= n && v[nextElem].val < v[i].val + d)
v[nextElem++].multime = ++ans;
v[nextElem++].multime = v[i].multime;
}
sort(v + 1, v + n + 1, [](const elem& l, const elem& r) { return l.i < r.i; });
out << ans << '\n';
for (int i = 1; i <= n; i++)
out << v[i].multime << '\n';
}