Cod sursa(job #379253)

Utilizator Mishu91Andrei Misarca Mishu91 Data 31 decembrie 2009 12:26:31
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>
#include <algorithm>

using namespace std;

#define MAX_N 300005

ifstream fin ("partitie.in");
ofstream fout ("partitie.out");

int N, D, M, A[MAX_N], I[MAX_N], Sol[MAX_N];

void citire()
{
	fin >> N >> D;

	for(int i = 1; i <= N; ++i)
	{
		fin >> A[i];
		I[i] = i;
	}
}

struct cmp
{
	bool operator() (const int &a, const int &b)
	{
		return A[a] < A[b];
	}
};

void solve()
{
	sort(I+1, I+N+1, cmp());

	for(int i = 1, j = 1; i <= N; ++i)
	{
		while(A[I[j+1]] - A[I[i]] < D && j < N)
			++j;

		if(j - i + 1 > M)
			M = j - i + 1;
	}

	fout << M << "\n";

	for(int i = 1; i <= N; ++i)
		Sol[I[i]] = ((i-1) % M) + 1;

	for(int i = 1; i <= N; ++i)
		fout << Sol[i] << "\n";
}

int main()
{
	citire();
	solve();
}