Pagini recente » Cod sursa (job #122663) | Cod sursa (job #1693783) | Cod sursa (job #2040842) | Cod sursa (job #1953249) | Cod sursa (job #130154)
Cod sursa(job #130154)
#include <stdio.h>
#include <algorithm>
#include <set>
using namespace std;
const int N_MAX = 300010;
set <pair <int, int> > H;
int v[N_MAX], ind[N_MAX], submult[N_MAX];
int cmp(int a, int b)
{
return (v[a] < v[b]);
}
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]);
ind[i] = i;
}
sort(ind + 1, ind + N + 1, cmp);
H.insert(make_pair(v[ind[1]], ind[1]));
submult[ind[1]] = 1;
int nr = 1, care;
set <pair <int, int> >::iterator it;
for (i = 2; i <= N; i ++) {
it = H.begin();
care = (*it).first;
// printf("%d %d %d %d\n", care, v[ind[i]], v[ind[i]] - D, ind[i]);
if (care > v[ind[i]] - D) {
submult[ind[i]] = nr + 1;
nr ++;
H.insert(make_pair(v[ind[i]], ind[i]));
}
else {
submult[ind[i]] = submult[(*it).second];
H.erase(it);
H.insert(make_pair(v[ind[i]], ind[i]));
}
}
printf("%d\n", nr);
for (i = 1; i <= N; i ++) printf("%d\n", submult[i]);
return 0;
}