Cod sursa(job #998216)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 16 septembrie 2013 14:59:47
Problema Partitie Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <algorithm>

using namespace std;

int n,d,maxim;

struct sol
{
    int val,poz,nr;
};

sol v[300010];

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

inline bool Cmp2(const sol A, const sol B)
{
    return A.poz<B.poz;
}


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;
    for(i=1;i<=n;i++)
    {
        while(v[j].val-v[i].val<d)
            j++;
        j--;
        maxim=max(maxim,j-i+1);
    }
    numar=1;
    for(i=1;i<=n;i++)
    {
        v[i].nr=numar;
        numar++;
        if(numar>maxim)
            numar=1;
    }
}

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

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