Cod sursa(job #998224)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 16 septembrie 2013 15:26:45
Problema Partitie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
#include <algorithm>

using namespace std;

int n,d,maxim,sol[300010];

struct solutie
{
    int val,poz;
};

solutie v[300010];

inline bool Cmp1(const solutie A, const solutie B)
{
    return A.val<B.val;
}

inline void Read()
{
    int i;
    ifstream fin("partitie.in");
    fin>>n>>d;
    for(i=1;i<=n;i++)
    {
        fin>>v[i].val;
        v[i].poz=i;
    }
    fin.close();
}

inline void Solve()
{
    int i,j,numar;
    sort(v+1,v+n+1,Cmp1);
    j=1;
    v[n+1].val=2000000000;
    v[n+1].poz=0;
    for(i=1;i<=n;i++)
    {
        if(!sol[v[i].poz])
            sol[v[i].poz]=++maxim;
        while(sol[v[j].poz] || v[j].val-v[i].val<d)
            j++;
        sol[v[j].poz]=sol[v[i].poz];
    }
}

inline void Afisare()
{
    int i;
    ofstream fout("partitie.out");
    fout<<maxim<<"\n";
    for(i=1;i<=n;i++)
        fout<<sol[i]<<"\n";
    fout.close();
}

int main()
{
    Read();
    Solve();
    Afisare();
    return 0;
}