Pagini recente » Cod sursa (job #2738285) | Cod sursa (job #2023773) | Cod sursa (job #2010882) | Cod sursa (job #1990671) | Cod sursa (job #127927)
Cod sursa(job #127927)
#include<stdio.h>
#include<string.h>
int n,k,a[300010],b[300010],m,i,j,nr,x;
int r1[2000],r2[2000],aux[300010];
int poz(int i,int j)
{int x=0,y=-1,aux;
while(i<j){
if(a[b[i]]>a[b[j]]) {aux=b[i];b[i]=b[j];b[j]=aux;aux=x;x=-y;y=-aux;}
i=i+x;j=j+y;}
return i;}
void sort(int i,int j)
{if(i>=j) return;
int k=poz(i,j);
sort(i,k-1);
sort(k+1,j);}
void radix(int n1,int n2)
{for(i=0;i<1000;i++) r1[i]=0;
for(i=1;i<=n;i++)
r1[a[b[i]]/n2%n1]++;
r2[0]=1;
for(i=1;i<1000;i++) r2[i]=r1[i-1]+r2[i-1];
for(i=1;i<=n;i++)
aux[r2[a[b[i]]/n2%n1]++]=b[i];
memcpy(b,aux,sizeof(b));}
void radixsort()
{radix(1000,1);
radix(1000000,1000);
radix(1000000000,1000000);}
int main()
{freopen("partitie.in","r",stdin);
freopen("partitie.out","w",stdout);
scanf("%d %d",&n,&k);
for(i=1;i<=n;i++) {scanf("%d",&a[i]);b[i]=i;}
sort(1,n);
//radixsort();
nr=1;j=1;
for(i=2;i<=n;i++)
if(a[b[i]]-a[b[j]]<k) nr++;
else{if(nr>m)m=nr;j++;}
for(i=1;i<=n;i++) a[b[i]]=(i-1)%m+1;
printf("%d\n",m);
for(i=1;i<=n;i++) printf("%d\n",a[i]);
fclose(stdout);
return 0;}