Pagini recente » Cod sursa (job #2431936) | Cod sursa (job #970164) | Cod sursa (job #442971) | Cod sursa (job #2816791) | Cod sursa (job #127920)
Cod sursa(job #127920)
#include<stdio.h>
int n,k,a[300010],b[300010],m,i,j,nr,x;
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);}
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);
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;}