Cod sursa(job #999805)

Utilizator scipianusFMI Ciprian Olariu scipianus Data 21 septembrie 2013 14:57:27
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.73 kb
#include<fstream>
#include<algorithm>
using namespace std;
int n,D,sol[300100],nrpart;
struct Element{
	int val,ind;
	bool operator <(const Element &A) const
	{
		return val<A.val;
	}
};
Element v[300100];

int main()
{
	int i,j;
	ifstream fin("partitie.in");
	fin>>n>>D;
	for(i=1;i<=n;i++)
	{
		fin>>v[i].val;
		v[i].ind=i;
	}
	fin.close();
	
	sort(v+1,v+n+1);
	for(i=1,j=2;i<=n;i++)
	{
		if(!sol[v[i].ind])
			sol[v[i].ind]=++nrpart;
		while(j<n && (v[j].val-v[i].val<D || sol[v[j].ind]!=0))
			j++;
		if(v[j].val-v[i].val>=D && sol[v[j].ind]==0)
			sol[v[j].ind]=sol[v[i].ind];
	}
	
	ofstream fout("partitie.out");
	fout<<nrpart<<"\n";
	for(i=1;i<=n;i++)
		fout<<sol[i]<<"\n";
	fout.close();
	return 0;
}