Cod sursa(job #2501175)

Utilizator Cojocaru_Andrei_CristianCojocaru Andrei Cristian Cojocaru_Andrei_Cristian Data 29 noiembrie 2019 10:23:59
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda simu Marime 1.03 kb
#include <fstream>
#include <algorithm>
using namespace std;
struct boi
{
    int val,poz;
} v[300005];
bool mycmp(boi a,boi b)
{
    return a.val<b.val;
}
int viz[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>>v[i].val;
        v[i].poz=i;
    }
    sort(v+1,v+n+1,mycmp);
    int cnt=0;
    for(int i=n; i>=1; i--)
    {
        int st=1,dr=n,last=0;
        if(viz[v[i].poz]==0)
        {
            cnt++;
            viz[v[i].poz]=cnt;
        }
        while(st<=dr)
        {
            int mij=(st+dr)/2;
            if(v[i].val-v[mij].val>=d&&viz[v[mij].poz]==0)
            {
                st=mij+1;
                last=mij;
            }
            else
                dr=mij-1;
        }
        if(last!=0)
            viz[v[last].poz]=viz[v[i].poz];
    }
    cout<<cnt<<"\n";
    for(int i=1; i<=n; i++)
    {
        cout<<viz[i]<<"\n";
    }
    return 0;
}