Cod sursa(job #130155)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 31 ianuarie 2008 13:55:02
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#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;
}