Pagini recente » Cod sursa (job #1117056) | Cod sursa (job #734589) | Profil 6kmeleon6 | Cod sursa (job #1369714) | Cod sursa (job #125418)
Cod sursa(job #125418)
#include <stdio.h>
#include <stdlib.h>
long n,d,i,ind[300002],a[300002];
long low,mid,high;
long sub[300002],elem[300002],nrsub,value;
int comp(const void * n1, const void * n2){
return (a[*((long*)n1)]-a[*((long*)n2)]);
}
int main(){
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]);
ind[i]=i;
}
qsort (ind,n+1,sizeof(long),comp);
for (i=1;i<=n;i++){
if (sub[ind[i]]==0){
nrsub++;
sub[ind[i]]=nrsub;
elem[nrsub]=1;
low = i+1;
high = n+1;
value=a[ind[i]]+d;
while (low < high){
mid = (low + high)/2;
if (a[ind[mid]] < value)
low = mid + 1;
else
high = mid;
}
while(sub[ind[low]]&&low<n)low++;
if (low<=n&&!sub[ind[low]]);
{sub[ind[low]]=nrsub;elem[nrsub]++;}
}
else{
low = i+1;
high = n+1;
value=a[ind[i]]+d;
while (low<high){
mid = (low + high)/2;
if (a[ind[mid]] < value)
low = mid + 1;
else
high = mid;
}
while(sub[ind[low]]&&low<n)low++;
if (low<=n&&!sub[ind[low]]);
{sub[ind[low]]=sub[ind[i]];elem[sub[ind[i]]]++;}
}
}
printf("%ld\n",nrsub);
for (i=1;i<=n;i++)
printf("%ld\n",sub[i]);
return 0;
}