Pagini recente » Cod sursa (job #304768) | Cod sursa (job #3286728) | Cod sursa (job #3212940) | Cod sursa (job #1791645) | Cod sursa (job #374987)
Cod sursa(job #374987)
# 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;
}