Pagini recente » Cod sursa (job #1910800) | Cod sursa (job #394802) | Cod sursa (job #1516795) | Cod sursa (job #3135333) | Cod sursa (job #3142014)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
vector<pair<int, int>> sir = {{0, 0}};
int sol_sir[300005] = {0};
int n, d;
bool isValid(int j, int i) { // verfica daca elementul j se potriveste cu elementul i
return sol_sir[sir[j].second] == 0 && sir[j].first >= sir[i].first + d;
}
int main() {
fin >> n >> d;
for (int i = 1; i <= n; i++) {
int a;
fin >> a;
sir.push_back({a, i});
}
sort(sir.begin(), sir.end());
int j = 1, sol = 0;
for (int i = 1; i <= n; i++) {
if (sol_sir[sir[i].second] == 0) {
sol++;
sol_sir[sir[i].second] = sol;
}
while (j <= n && !isValid(j, i)) {
j++;
}
if (j <= n) {
sol_sir[sir[j].second] = sol_sir[sir[i].second];
}
}
fout << sol << '\n';
for (int i = 1; i <= n; i++) {
fout << sol_sir[i] << '\n';
}
return 0;
}