Cod sursa(job #3260031)

Utilizator vladsoartavlad sofronea vladsoarta Data 29 noiembrie 2024 11:23:53
Problema Partitie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <fstream>
#include <set>
#include <algorithm>
using namespace std;
ifstream cin("partitie.in");
ofstream cout("partitie.out");

multiset<pair<int,int>>s;
int n,d,i;
pair<int,int>v[300001];
int ans[300001];
int nrgrup;

int main()
{
    cin>>n>>d;

    for(i=1; i<=n; i++)
    {
        int elem;
        cin>>elem;
        v[i].first = elem;
        v[i].second = i;
    }
    sort(v+1,v+1+n);
    for(i=1; i<=n; i++)
    {
        auto it = lower_bound(s.begin(),s.end(),make_pair(v[i].first-d,1));
        if((it != s.end()||s.size() !=0)&&it->first + d != v[i].first)
        {
            if(it == s.begin())
                it=s.end();
            else
                it--;
        }
        if(it == s.end())
        {
            nrgrup++;
            ans[v[i].second] = nrgrup;
            s.insert(make_pair(v[i].first,nrgrup));
        }
        else
        {
            int grup = it->second;
            ans[v[i].second] = grup;
            s.erase(it);
            s.insert(make_pair(v[i].first,grup));
        }
    }

    cout<<s.size()<<'\n';
    for(i=1;i<=n;i++)
        cout<<ans[i]<<'\n';
    return 0;
}