Cod sursa(job #2501160)

Utilizator AlexutAlex Calinescu Alexut Data 29 noiembrie 2019 09:59:45
Problema Partitie Scor 60
Compilator cpp-64 Status done
Runda simu Marime 1.12 kb
#include <bits/stdc++.h>

using namespace std;

pair <int,int> elem[300005];
vector <pair <int, int> > submult[300005];
int final[300005];

int main()
{
    ifstream cin ("partitie.in");
    ofstream cout ("partitie.out");
    int n,d;
    cin>>n>>d;
    for(int i=1; i<=n; i++)
    {
        cin>>elem[i].first;
        elem[i].second=i;
    }
    sort(elem+1,elem+n+1);
    int sm=1;
    submult[sm].push_back(elem[1]);
    for(int i=2; i<=n; i++)
    {
        int ok=0;
        int cand=1;
        while(cand<=sm)
        {
            if(elem[i].first-submult[cand][submult[cand].size()-1].first>=d)
            {
                ok=1;
                submult[cand].push_back(elem[i]);
                break;
            }
            cand++;
        }
        if(ok==0)
        {
            sm++;
            submult[sm].push_back(elem[i]);
        }
    }
    for(int i=1; i<=sm; i++)
    {
        for(int j=0; j<submult[i].size(); j++)
            final[submult[i][j].second]=i;
    }
    cout<<sm<<"\n";
    for(int i=1; i<=n; i++)
        cout<<final[i]<<"\n";
    return 0;
}