Pagini recente » Cod sursa (job #2720942) | Cod sursa (job #2167582) | Cod sursa (job #2261434) | Cod sursa (job #3209669) | Cod sursa (job #2929005)
#include <stdio.h>
#include <algorithm>
#define N 300000
struct elem { int val, poz; };
int multime[N];
struct elem v[N];
int n;
int main() {
FILE *fin, *fout;
int d;
fin = fopen( "partitie.in", "r" );
fscanf( fin, "%d%d", &n, &d );
for ( int i = 0; i < n; i ++ ) {
fscanf( fin, "%d", &v[i].val );
v[i].poz = i;
}
fclose( fin );
std::sort( v, v + n, [](struct elem a, struct elem b) { return a.val < b.val; } );
int p = 1, mult = 1;
for ( int i = 0; i < n; i ++ ) {
if ( !multime[v[i].poz] )
multime[v[i].poz] = mult ++;
while ( p < n && ( multime[v[p].poz] || v[p].val - v[i].val < d ) )
p ++;
if ( p < n )
multime[v[p ++].poz] = multime[v[i].poz];
}
fout = fopen( "partitie.out", "w" );
fprintf( fout, "%d\n", mult - 1 );
for ( int i = 0; i < n; i ++ )
fprintf( fout, "%d\n", multime[i] );
fclose( fout );
return 0;
}