Cod sursa(job #2658506)

Utilizator valentinchipuc123Valentin Chipuc valentinchipuc123 Data 14 octombrie 2020 09:42:43
Problema Partitie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <set>

using namespace std;

ifstream f("partitie.in");
ofstream g("partitie.out");

int n,d,aux[300005],nr=0;
struct sir{
 int x,loc,initial;
}v[300005];

set< pair<int,int> > ajut;
pair<int,int> ajutor;

bool cmp(sir a,sir b)
{
 return a.x<b.x;
}

void cauta(int x,int ind)
{
 int caca=x-d;
 ajutor=*ajut.begin();

 if(ajutor.first<=caca){
    ajut.erase(ajutor);
    ajut.insert(make_pair(x,ajutor.second));
    v[ind].loc=ajutor.second;
 }
 else{
    nr++;
    ajut.insert(make_pair(x,nr));
    v[ind].loc=nr;
 }

}

int main()
{
 f>>n>>d;
 for(int i=1;i<=n;i++) f>>v[i].x,v[i].loc=0,v[i].initial=i;

 sort(v+1,v+n+1,cmp);

 nr=1;
 v[1].loc=1;
 ajut.insert(make_pair(v[1].x,1));

 for(int i=2;i<=n;i++)
 {
   cauta(v[i].x,i);
 }

 for(int i=1;i<=n;i++) aux[v[i].initial]=v[i].loc;
 g<<nr<<'\n';
 for(int i=1;i<=n;i++) g<<aux[i]<<'\n';
}