Pagini recente » Cod sursa (job #2620306) | Cod sursa (job #64348) | Cod sursa (job #665239) | Autentificare | Cod sursa (job #1627306)
#include <algorithm>
#include <fstream>
#include <string>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
const int nmax= 300000;
int x[nmax+1], y[nmax+1];
bool cmp( int a, int b ) {
return x[a]<x[b];
}
string buffer;
string::iterator buffer_it;
void read_int_nn( int &x ) {
for ( ; *buffer_it<'0' || *buffer_it>'9'; ++buffer_it ) ;
for ( x= 0; *buffer_it>='0' && *buffer_it<='9'; ++buffer_it ) {
x= x*10+*buffer_it-'0';
}
}
int main( ) {
getline( fin, buffer, (char)0 );
buffer_it= buffer.begin();
int n, d;
read_int_nn(n), read_int_nn(d);
for ( int i= 1; i<=n; ++i ) {
read_int_nn(x[i]);
y[i]= i;
}
sort( y+1, y+n+1, cmp ) ;
int k= 0;
for ( int i= 1, j= 1; i<=n; ++i ) {
for ( ; j<=n && x[y[i]]+d>x[y[j]]; ++j ) ;
--j;
k= max(k, j-i+1);
}
for ( int i= 1; i<=n; ++i ) {
x[y[i]]= i%k;
}
fout<<k<<"\n";
for ( int i= 1; i<=n; ++i ) {
fout<<x[i]+1<<"\n";
}
return 0;
}