Pagini recente » Cod sursa (job #1368333) | Cod sursa (job #1886613) | Cod sursa (job #3218673) | Cod sursa (job #3190298) | Cod sursa (job #125073)
Cod sursa(job #125073)
#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;
const int N_MAX = 300010;
set <pair <int, int> > H;
int v[N_MAX], submult[N_MAX];
int main()
{
freopen("partitie.in", "r", stdin);
//#ifndef _SCREEN_
freopen("partitie.out", "w", stdout);
//#endif
int N, D, i;
scanf("%d %d\n", &N, &D);
for (i = 1; i <= N; i ++) {
scanf("%d\n", &v[i]);
}
sort(v + 1, v + N + 1);
H.insert(make_pair(v[1], 1));
submult[1] = 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] - D) {
submult[i] = nr + 1;
nr ++;
H.insert(make_pair(v[i], i));
}
else {
submult[i] = submult[(*it).second];
H.erase(it);
H.insert(make_pair(v[i], i));
}
}
printf("%d\n", nr);
for (i = 1; i <= N; i ++) printf("%d\n", submult[i]);
return 0;
}