Cod sursa(job #3216936)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 20 martie 2024 15:34:24
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <bits/stdc++.h>

#pragma optimize GCC ("Ofast")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")

///#include <tryhardmode>
///#include <GODMODE::ON>

using namespace std;

ifstream fin ("partitie.in");
ofstream fout ("partitie.out");

#define cin fin
#define cout fout

const int NMAX=3e5+5;

int color[NMAX];

struct elem{
    int val;
    int ind;
}v[NMAX];

bool cmp(elem a,elem b)
{
    if(a.val!=b.val)
        return a.val<b.val;
    return a.ind<b.ind;
}

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n,i,j,d,kon=0;
    cin>>n>>d;
    for(i=1;i<=n;i++)
    {
        cin>>v[i].val;
        v[i].ind=i;
    }
    sort(v+1,v+n+1,cmp);
    int st=1,dr=1;
    while(st<=n)
    {
        if(!color[v[st].ind])
            color[v[st].ind]=++kon;
        while(dr<=n && (color[v[dr].ind] || v[dr].val-v[st].val<d))
            dr++;
        if(dr<=n)
            color[v[dr].ind]=color[v[st].ind];
        st++;
    }
    cout<<kon<<"\n";
    for(i=1;i<=n;i++)
        cout<<color[i]<<"\n";
    cin.close();
    cout.close();
    return 0;
}