Pagini recente » Cod sursa (job #1071744) | Cod sursa (job #1363146) | Cod sursa (job #2027832) | Cod sursa (job #2253385) | Cod sursa (job #125516)
Cod sursa(job #125516)
#include<stdio.h>
int n,k,a[300010],b[300010],c[300010],m,i,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);
while(nr<n)
{m++;
for(i=1;i<=n;i++) if(!c[b[i]]) break;
nr++;
x=a[b[i]];c[b[i]]=m;
for(i=i+1;i<=n;i++)
if(!c[b[i]]&&a[b[i]]-x>=k) {x=a[b[i]];c[b[i]]=m;nr++;}}
printf("%d\n",m);
for(i=1;i<=n;i++) printf("%d\n",c[i]);
fclose(stdout);
return 0;}