Pagini recente » Cod sursa (job #411191) | Cod sursa (job #2358697) | Cod sursa (job #2746257) | Cod sursa (job #1439808) | Cod sursa (job #196187)
Cod sursa(job #196187)
#include <stdio.h>
#include <algorithm>
using namespace std;
#define NMAX 300010
#define ff first
#define ss second
int N, D;
pair <int, int> a[NMAX];
int rez[NMAX];
int st[NMAX];
int main()
{
int i, j, nr = 0;
freopen("partitie.in", "r", stdin);
freopen("partitie.out", "w", stdout);
scanf("%d %d", &N, &D);
for (i = 1; i <= N; i++) {
scanf("%d", &a[i].ff);
a[i].ss = i;
}
sort(a + 1, a + N + 1);
for (i = 1, j = 0; i <= N; i++) {
while (a[i].ff - a[j + 1].ff >= D) j++, st[++st[0]] = a[j].ss;
rez[a[i].ss] = (st[0] == 0) ? ++nr : rez[ st[st[0]--] ];
}
printf("%d\n", nr);
for (i = 1; i <= N; i++) printf("%d\n", rez[i]);
return 0;
}