Cod sursa(job #1627306)

Utilizator Athena99Anghel Anca Athena99 Data 3 martie 2016 16:23:13
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#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;
}