Pagini recente » Cod sursa (job #1791437) | Cod sursa (job #1108725) | Cod sursa (job #2082687) | Cod sursa (job #2393953) | Cod sursa (job #930761)
Cod sursa(job #930761)
#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;
}