Cod sursa(job #196187)

Utilizator gcosminGheorghe Cosmin gcosmin Data 24 iunie 2008 20:13:54
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.65 kb
#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;
}