Pagini recente » Cod sursa (job #2572871) | Cod sursa (job #604792) | Cod sursa (job #608971) | Cod sursa (job #504429) | Cod sursa (job #125949)
Cod sursa(job #125949)
#include<stdio.h>
long n,i,j,max,d,gas;
long a[300000],ult[300000],sol[300000],nr[300000];
long poz(long li,long ls)
{
long t=0,i,j,aux;
i=li;
j=ls;
while(i<j)
{
if(a[nr[i]]>a[nr[j]])
{
aux=nr[i];
nr[i]=nr[j];
nr[j]=aux;
t=1-t;
}
if(t)
j--;
else
i++;
}
return i;
}
void quick(long li,long ls)
{
long k;
if(li<ls)
{
k=poz(li,ls);
quick(li,k-1);
quick(k+1,ls);
}
}
int main(void)
{
freopen("partitie.in","r",stdin);
freopen("partitie.out","w",stdout);
scanf("%ld%ld",&n,&d);
for(i=1;i<=n;i++)
{
scanf("%ld",&a[i]);
nr[i]=i;
}
quick(1,n);
ult[1]=a[nr[1]];
sol[nr[1]]=1;
max=1;
for(i=2;i<=n;i++)
{
gas=0;
for(j=1;j<=max;j++)
if(a[nr[i]]-ult[j]>=d)
{
gas=1;
ult[j]=a[nr[i]];
sol[nr[i]]=j;
break;
}
if(!gas)
{
max++;
ult[max]=a[nr[i]];
sol[nr[i]]=max;
}
}
printf("%ld\n",max);
for(i=1;i<=n;i++)
printf("%ld\n",sol[i]);
return 0;
}