Cod sursa(job #922075)

Utilizator ChallengeMurtaza Alexandru Challenge Data 21 martie 2013 21:57:45
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <fstream>
#include <algorithm>

using namespace std;

const char InFile[]="partitie.in";
const char OutFile[]="partitie.out";
const int MaxN=300111;

ifstream fin(InFile);
ofstream fout(OutFile);

int N,K,V[MaxN],P[MaxN],T[MaxN],VN[MaxN];

struct CMP
{
	inline bool operator() (const int &a, const int &b)
	{
		return V[a]<V[b];
	}
};

int main()
{
	fin>>N>>K;
	for(register int i=1;i<=N;++i)
	{
		fin>>V[i];
		P[i]=i;
	}
	fin.close();

	sort(P+1,P+1+N,CMP());
	for(register int i=1;i<=N;++i)
	{
		VN[i]=V[P[i]];
	}

	int dr=1;
	for(register int i=1;i<=N;++i)
	{
		if(!T[i])
		{
			T[i]=++T[0];
		}
		while(dr<N && (VN[dr]-VN[i]<K || T[dr]))
		{
			++dr;
		}
		if(!T[dr] && VN[dr]-VN[i]>=K)
		{
			T[dr]=T[i];
		}
	}

	for(register int i=1;i<=N;++i)
	{
		V[P[i]]=T[i];
	}

	fout<<T[0]<<" ";
	for(register int i=1;i<=N;++i)
	{
		fout<<V[i]<<" ";
	}
	fout.close();
	return 0;
}