Cod sursa(job #2501224)

Utilizator gavra_bogdanBogdan Gavra gavra_bogdan Data 29 noiembrie 2019 11:30:55
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda simu Marime 1.09 kb
#include <fstream>
#include <algorithm>
#include <set>

using namespace std;

const int nmax=300005;

pair<int,int> v[nmax];
int ans[nmax];
multiset<pair<int,int>>s;

int main()
{
    ifstream cin("partitie.in");
    ofstream cout("partitie.out");
    int n,d;
    cin>>n>>d;
    for(int i=1; i<=n; i++)
    {
        cin>>v[i].first;
        v[i].second=i;
    }
    sort(v+1,v+n+1);
    s.insert(v[1]);
    ans[v[1].second]=1;
    int nr=1;
    for(int i=2; i<=n; i++)
    {
        pair<int,int> x=*s.begin();
        pair<int,int> y=*s.end();
        if(y.first-v[i].first>=d)
        {
            s.erase(s.end());
            s.insert(v[i]);
            ans[v[i].second]=ans[y.second];
        }
        else if(v[i].first-x.first>=d)
        {
            s.erase(s.begin());
            s.insert(v[i]);
            ans[v[i].second]=ans[x.second];
        }
        else
        {
            ans[v[i].second]=++nr;
            s.insert(v[i]);
        }
    }
    cout<<s.size()<<"\n";
    for(int i=1;i<=n;i++)
        cout<<ans[i]<<"\n";
    return 0;
}