Pagini recente » Cod sursa (job #1873250) | Cod sursa (job #1232471) | Cod sursa (job #1028122) | Cod sursa (job #2723311) | Cod sursa (job #942330)
Cod sursa(job #942330)
////////////////
#include<cstdio>
#include<vector>
#include<algorithm>
#define NMAX 300005
FILE *f=fopen("partitie.in","r");
FILE *g=fopen("partitie.out","w");
using namespace std;
struct numb{
int value;
int pos;
};
numb v[NMAX];
int n,Answer,dist;
int sol[NMAX];
bool cmp ( const numb A,const numb B)
{
if(A.value == B.value)
return A.pos<B.pos;
return A.value < B.value;
}
void Read ( void )
{
fscanf(f,"%d%d",&n,&dist);
for(int i(1) ; i <= n ; ++i )
{
fscanf(f,"%d",&v[i].value);
v[i].pos=i;
}
fclose(f);
}
void Solve ( void )
{
sort(v+1,v+n+1,cmp);
int Left,Right;
for(Left=1 ; Left <= n ; ++Left )
{
if( ! sol[v[Left].pos])
sol[v[Left].pos]=(++Answer);
for(; Right<= n && ( sol[v[Right].pos] || v[Right].value-v[Left].value <dist ); )
++Right;
if( ! sol[v[Right].pos])
sol[v[Right].pos]=sol[v[Left].pos];
}
}
void Write ( void )
{
fprintf(g,"%d\n",Answer);
for( int i(1) ; i <= n ; ++i )
fprintf(g,"%d\n",sol[i]);
fclose(g);
}
int main ( void )
{
Read();
Solve();
Write();
return 0;
}