Cod sursa(job #3142035)

Utilizator lazureanrLazurean Razvan lazureanr Data 18 iulie 2023 14:50:10
Problema Partitie Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
struct vec
{
    int el,poz;
}a[300001];
int nr=0;
int n,d;
int sol[300001];
int main()
{
    fin>>n>>d;
    for(int i=1; i<=n; i++)
    {
        fin>>a[i].el;
        a[i].poz=i;
    }
    bool sorted;
    do
    {
        sorted = true;
        for (int k = 1; k < n; k++)
            if (a[k].el > a[k + 1].el)
            {
                vec aux = a[k];
                a[k] = a[k + 1];
                a[k + 1] = aux;
                sorted = false;
            }
    }
    while (!sorted);
    int j=2;
    for(int i=1; i<=n; i++)
    {
        if(sol[a[i].poz]==0)
        {
            sol[a[i].poz]=++nr;
        }
        while(j<=n && (sol[a[j].poz]||a[j].el<a[i].el+d))
        {
            j++;
        }
        if(j<=n)
        {
            sol[a[j].poz]=sol[a[i].poz];
        }
        /*for(int j=i+1; j<=n; j++)
        {
            if(a[i]+d<=a[j] && sol[j]==0)
            {
                cout<<a[i]<<" "<<a[j]<<endl;
                sol[j]=sol[i];
                break;
            }
        }*/
    }
    fout<<nr<<'\n';
    for(int i=1; i<=n; i++)
    {
        fout<<sol[i]<<'\n';
    }
    return 0;
}