Cod sursa(job #1627296)

Utilizator Athena99Anghel Anca Athena99 Data 3 martie 2016 16:19:23
Problema Partitie Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <algorithm>
#include <fstream>
#include <string>

using namespace std;

ifstream fin("partitie.in");
ofstream fout("partitie.out");

const int nmax= 300000;

struct str {
    int x, y;
} x[nmax+1];

bool cmp1( str x, str y ) {
    return x.x<y.x;
}

bool cmp2( str x, str y ) {
    return x.y<y.y;
}

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].x);
        x[i].y= i;
    }
    sort( x+1, x+n+1, cmp1 ) ;

    int k= 0;
    for ( int i= 1, j= 1; i<=n; ++i ) {
        for ( ; j<=n && x[i].x+d>x[j].x; ++j ) ;
        --j;
        k= max(k, j-i+1);
    }

    for ( int i= 1; i<=n; ++i ) {
        x[i].x= i%k;
    }

    sort( x+1, x+n+1, cmp2 ) ;
    fout<<k<<"\n";
    for ( int i= 1; i<=n; ++i ) {
        fout<<x[i].x+1<<"\n";
    }

    return 0;
}