Cod sursa(job #125927)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 20 ianuarie 2008 21:23:59
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <queue>
#include <algorithm>

using namespace std;

#define MAXN 300005

int N, K;
int x[MAXN], o[MAXN];

inline int cmp( int a, int b )
{
	return x[a] < x[b];
}

queue<int> Q;
int cur[MAXN], rez[MAXN];

char tmp[16];

int main()
{
	freopen("partitie.in", "rt", stdin);
	freopen("partitie.out", "wt", stdout);

	scanf("%d %d ", &N, &K);
	for (int i = 0; i < N; i++)
	{
		fgets( tmp, 16, stdin );

		char *p = tmp;
		for (x[i] = 0; '0' <= *p && *p <= '9'; p++)
			x[i] = x[i] * 10 + *p - '0';
		o[i] = i;
	}

	sort( o, o + N, cmp );
	int NR = 0;
	for (int k = 0; k < N; k++)
	{
		int i = o[k];
		if (Q.empty() || (cur[ Q.front() ] > x[i] - K))
			NR++, cur[NR] = x[i],
			Q.push(NR),
			rez[i] = NR;
		else
		{
			int set = Q.front();

			Q.pop();
			cur[set] = x[i];
			Q.push(set);
			rez[i] = set;
		}
	}

	printf("%d\n", NR);
	for (int i = 0; i < N; i++)
		printf("%d\n", rez[i]);

	return 0;
}