Cod sursa(job #374987)

Utilizator loginLogin Iustin Anca login Data 18 decembrie 2009 23:32:55
Problema Partitie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
# include <fstream>
using namespace std;
int n, d, v[300003], poz[300003], p[300003], nrp;

void qsort (int st, int dr)
{
	if (st<dr)
	{
		int i=st, j=dr, d=0, m=(st+dr)/2, a;
		a=poz[i], poz[i]=poz[m], poz[m]=a;
		while (i<j)
		{
			if (v[poz[i]]>v[poz[j]])
			{
				a=poz[i], poz[i]=poz[j], poz[j]=a;
				d=1-d;
			}
			i+=d;
			j-=1-d;
		}
		qsort(st, i-1);
		qsort(i+1, dr);
	}
}

int min ()
{
	int i, q=1, min=p[1];
	for (i=2;i<=nrp;i++)
		if (p[i]<min)
			min=p[i],q=i;
	return q;
}

int main ()
{
	int i, q=1;
	ifstream fin ("partitie.in");
	ofstream fout ("partitie.out");
	fin>>n>>d;
	for (i=1;i<=n;i++)
		fin>>v[i], poz[i]=i;
	qsort(1, n);
	p[++nrp]=v[poz[1]];
	v[poz[1]]=nrp;
	for (i=2;i<=n;i++)
	{
		//q=min();
		if (v[poz[i]]-p[q]>=d)
		{
			p[q]=v[poz[i]];
			v[poz[i]]=q;
		}
		else
		{
			p[++nrp]=v[poz[i]];
			v[poz[i]]=nrp;
		}
	}
	fout<<nrp<<endl;
	for (i=1;i<=n;i++)
		fout<<v[i]<<endl;
	return 0;
}