Pagini recente » Cod sursa (job #1049781) | Cod sursa (job #1653834) | Cod sursa (job #2867466) | Cod sursa (job #896421) | Cod sursa (job #125136)
Cod sursa(job #125136)
#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;
const int N_MAX = 300010;
set <pair <int, int> > H;
pair <int, int> v[N_MAX];
int submult[N_MAX];
int main()
{
freopen("partitie.in", "r", stdin);
//#ifndef _SCREEN_
freopen("partitie.out", "w", stdout);
//#endif
int N, D, i, x;
scanf("%d %d\n", &N, &D);
for (i = 1; i <= N; i ++) {
scanf("%d\n", &x);
v[i] = make_pair(x, i);
}
sort(v + 1, v + N + 1);
H.insert(v[1]);
submult[v[1].second] = 1;
int nr = 1, care;
set <pair <int, int> >::iterator it;
for (i = 2; i <= N; i ++) {
it = H.begin();
care = (*it).first;
if (care > v[i].first - D) {
submult[v[i].second] = nr + 1;
nr ++;
H.insert(v[i]);
}
else {
submult[v[i].second] = submult[(*it).second];
H.erase(it);
H.insert(v[i]);
}
}
printf("%d\n", nr);
for (i = 1; i <= N; i ++) printf("%d\n", submult[i]);
return 0;
}