Cod sursa(job #162160)

Utilizator CezarMocanCezar Mocan CezarMocan Data 19 martie 2008 16:24:02
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <algorithm>

using namespace std;

struct partitie{long a;long b;};

long n,i,j,d,p,mx,x[300100],t[300100];
partitie v[300100];

bool cmp(partitie x, partitie y)
    {
    if (x.a<y.a)
        return true;
    else
        return false;    
    }

int main(){
freopen("partitie.in","r",stdin);
freopen("partitie.out","w",stdout);
scanf("%d%d",&n,&d);
for (i=1;i<=n;i++)
    {
    scanf("%d",&v[i].a);
    v[i].b=i;
    }
sort(v+1,v+n+1,cmp);
j=1;
while (v[j].a-v[1].a<d)
    ++j;
mx=j-1;
p=1;
j--;
for (i=2;i<=n;i++)
    {
    while (v[j].a-v[i].a<d&&j<=n)
        j++;
    j--;
    if (j-i+1>mx)
        {
        mx=j-i+1;
        p=i;
        }
    }
printf("%d\n",mx);
for (i=p;i<=n;i++)
    x[i]=(i-p)%mx+1;
d=mx;
for (i=p-1;i>=1;i--)
    {
    x[i]=d;
    d--;
    if (d<1)
        d=mx;    
    }
for (i=1;i<=n;i++)
    t[v[i].b]=x[i];
for (i=1;i<=n;i++)
    printf("%d\n",t[i]);    
return 0;
}