Cod sursa(job #2987553)

Utilizator Allie28Radu Alesia Allie28 Data 2 martie 2023 14:51:38
Problema Partitie Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;

ifstream fin("partitie.in");
ofstream fout("partitie.out");
const int LMAX=300001;
int elem[LMAX],pozi[LMAX],sub[LMAX];

int main()
{
    int n,D,i,j,aux,aux2,s,d,m,nrsub;
    fin>>n>>D;
    for (i=0;i<n;i++) {
        fin>>elem[i];
        pozi[i]=elem[i];
    }
    for (i=0;i<n-1;i++) {
        aux=i;
        for (j=i+1;j<n;j++) {
            if (elem[aux]>elem[j]) {
                aux=j;
            }
        }
        aux2=elem[i];
        elem[i]=elem[aux];
        elem[aux]=aux2;
    }
    nrsub=1;
    for (i=0;i<n;i++) {
        if (sub[elem[i]]==0) {
            sub[elem[i]]=nrsub;
            j=i;
            while (j<n-1) {
                s=-1;
                d=n-1;
                while (s+1!=d) {
                    m=(s+d)/2;
                    if (elem[m]<elem[j]+D) {
                        s=m;
                    }
                    else {
                        d=m;
                    }
                }
                while (d<n && sub[elem[d]]!=0) {
                    d++;
                }
                if (elem[d]>=elem[j]+D) {
                    sub[elem[d]]=nrsub;
                }
                j=d;
            }
            nrsub++;
        }
    }
    fout<<nrsub-1<<endl;
    for (i=0;i<n;i++) {
        fout<<sub[pozi[i]]<<endl;
    }


    fin.close();
    fout.close();
    return 0;
}