Cod sursa(job #1780462)

Utilizator silkMarin Dragos silk Data 16 octombrie 2016 11:34:09
Problema Partitie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <cstdio>
#include <algorithm>
#define NMax 300000
using namespace std;

struct part{ int o,v; };
part deque[NMax+1];
part elem[NMax+1];
int o[NMax+1];

bool cmp(const part A, const part B)
{
    return A.v<B.v;
}

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

    int i,N,D,x,inc,sf,t;

    scanf("%d %d",&N,&D);
    for(i = 1; i <= N; ++i)
    {
        scanf("%d",&x);
        elem[i].v = x;
        elem[i].o = i;
    }

    sort(elem+1,elem+N+1,cmp);
    inc = sf = 0;
    deque[0].v = elem[1].v;
    deque[0].o = 1;
    o[ elem[1].o ] = 1;

    for(t = 1, i = 2; i <= N; ++i)
    {
        if( elem[i].v - deque[inc].v >= D )
        {
            deque[++sf].v = elem[i].v;
            deque[sf].o = deque[inc].o;
            ++inc;
        }
        else
        {
            deque[++sf].v = elem[i].v;
            deque[sf].o = ++t;
        }

        o[ elem[i].o ] = deque[sf].o;
    }

    printf("%d\n",sf-inc+1);
    for(i = 1; i <= N; ++i) printf("%d\n",o[i]);




return 0;
}