Pagini recente » Cod sursa (job #1913536) | Cod sursa (job #1608834) | Cod sursa (job #117694) | Cod sursa (job #2618724) | Cod sursa (job #1203722)
#include <cstdio>
#include <algorithm>
#include <fstream>
#define x first
#define y second
#define NMAX 300007
#define MaxChar 1000000
#define verf ( (++CharB==MaxChar) ? ( in.read(Buffer,MaxChar),CharB=0 ) : (1) )
using namespace std;
ifstream in("partitie.in");
pair < int, int > a[NMAX];
int n, d, Sol[NMAX];
int CharB = MaxChar - 1;
char Buffer[MaxChar];
void cit(int &a){
bool ok = 0;
for( ; !( (Buffer[ CharB ]>='0' && Buffer[ CharB ]<='9') || ( Buffer[ CharB ] == '-' ) ); verf )
;
if ( Buffer[ CharB ] == '-' ){
++CharB;
ok = 1;
}
for( a=0; (Buffer[ CharB ]>='0' && Buffer[ CharB ]<='9'); a*=10,a+=( Buffer[ CharB ]-'0'), verf );
if(ok)
a=-a;
}
void Solve(int poz, int val){
if(poz <= n){
int i;
for(i = poz; i <= n; ++i)
if(a[i].x - a[poz].x >= d && Sol[a[i].y] == 0)
break;
Sol[a[i].y] = val;
Solve(i, val);
}
}
int main(){
freopen("partitie.out", "w", stdout);
cit(n);
cit(d);
for(int i = 1; i <= n; ++i){
int A;
cit(A);
a[i] = make_pair(A, i);
}
sort(a + 1, a + n + 1);
int k = 0;
for(int j = 1; j <= n; ++j)
if(Sol[a[j].y] == 0){
++k;
Sol[a[j].y] = k;
Solve(j, k);
}
printf("%d\n", k);
for(int i = 1; i <= n; ++i)
printf("%d\n", Sol[i]);
return 0;
}