Pagini recente » Cod sursa (job #1478637) | Cod sursa (job #1462396) | Cod sursa (job #1148411) | Cod sursa (job #253879) | Cod sursa (job #125065)
Cod sursa(job #125065)
#include<stdio.h>
#include<string.h>
#define NMAX 300005
#include<algorithm>
using namespace std;
long poz,x[NMAX],p[NMAX],i,j,n,m,k,l,a,s,jj,y[NMAX],rez[NMAX];
struct kkt
{
long X,Y;
};
kkt Q[NMAX];
int cmpf(const kkt a,const kkt b)
{
return a.X<b.X;
}
int main()
{
freopen("partitie.in","r",stdin);
freopen("partitie.out","w",stdout);
scanf("%ld%ld",&n,&k);
for (i=1;i<=n;i++)
{
scanf("%ld",&x[i]);
Q[i].X=x[i];
y[i]=i;
Q[i].Y=y[i];
}
/* a=1;
m=n;
while (a)
{
a=0;
for (i=1;i<m;i++)
if (x[i]>x[i+1]) {a=x[i]; x[i]=x[i+1]; x[i+1]=a; a=y[i]; y[i]=y[i+1];y[i+1]=a; a=1;}
m--;
}
*/
sort(Q+1,Q+n+1,cmpf);
/* memcpy(x,Q.X,sizeof(Q.X));
memcpy(y,Q.Y,sizeof(Q.Y));
*/
for (i=1;i<=n;i++)
{
x[i]=Q[i].X;
y[i]=Q[i].Y;
}
p[1]=x[1];
m=1;
poz=1;
rez[y[1]]=1;
for (i=2;i<=n;i++)
{
a=0;
s=-2000000000;
jj=-1;
for (j=1;j<=m;j++)
if (p[j]+k<=x[i]&&s<p[j]) {jj=j;s=p[j];}
if (jj!=-1)
{
rez[y[i]]=jj;
p[jj]=x[i];
}
else
{
m++;
p[m]=x[i];
rez[y[i]]=m;
}
}
printf("%ld\n",m);
for (i=1;i<=n;i++)
printf("%ld\n",rez[i]);
return 0;
}