Cod sursa(job #1001457)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 24 septembrie 2013 23:31:44
Problema Partitie Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#include <algorithm>

#define In "partitie.in"
#define Out "partitie.out"
#define Nmax 300005

using namespace std;

struct vect
{
    int value, pos;
    bool operator <(const vect& A)const
    {
        return value<A.value;
    }
};
vect a[Nmax];
int sol[Nmax],cnt, n, k;
inline void Read()
{
    ifstream f(In);
    f >> n >> k;
    for(int i = 1;i <= n; ++i)
    {
        f >> a[i].value;
        a[i].pos = i;
    }
    f.close();
}

inline void Solve()
{
    sort(a+1,a+n+1);
    int i,j;
    for(i = j = 1;i <= n; ++i,++j)
    {
        if(!sol[a[i].pos])
            sol[a[i].pos] = ++cnt;
        for(;j <= n && a[j].value - a[i].value < k; ++j);
        sol[a[j].pos] = sol[a[i].pos];
    }
}

inline void Write()
{
    ofstream g(Out);
    g<<cnt<<"\n";
    for(int i = 1;i <= n; ++i)
        g<<sol[i]<<"\n";
}
int main()
{
    Read();
    Solve();
    Write();
    return 0;
}