Cod sursa(job #377940)

Utilizator DraStiKDragos Oprica DraStiK Data 26 decembrie 2009 22:56:03
Problema Partitie Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <algorithm>
using namespace std;

#define DIM 300005

struct numar {int x,c,in;} v[DIM];
int n,d,nrc,ind;

void read ()
{
    int i;

    scanf ("%d%d",&n,&d);
    for (i=1; i<=n; ++i)
    {
        scanf ("%d",&v[i].x);
        v[i].in=i;
    }
}

inline int cmp1 (const numar &a,const numar &b)
{
    return a.x<b.x;
}

inline int cmp2 (const numar &a,const numar &b)
{
    return a.in<b.in;
}

void solve ()
{
    int i,j;

    sort (v+1,v+n+1,cmp1);
    for (i=j=1; j<=n; ++i)
    {
        for ( ; v[j+1].x-v[i].x<=d && j<=n; ++j);
        if (j-i>nrc)
        {
            nrc=j-i;
            ind=i;
        }
    }
    for (i=ind, j=0; i<=n; ++i, j=(j+1)%nrc)
        v[i].c=j+1;
    for (i=ind-1, j=nrc-1; i>=1; --i, j=(j-1+nrc)%nrc)
        v[i].c=j+1;
    sort (v+1,v+n+1,cmp2);
}

void print ()
{
    int i;

    printf ("%d\n",nrc);
    for (i=1; i<=n; ++i)
        printf ("%d\n",v[i].c);
}

int main ()
{
    freopen ("partitie.in","r",stdin);
    freopen ("partitie.out","w",stdout);

    read ();
    solve ();
    print ();

    return 0;
}