Pagini recente » Borderou de evaluare (job #880446) | Cod sursa (job #178062) | Borderou de evaluare (job #2015144) | Borderou de evaluare (job #2021106) | Cod sursa (job #2658506)
#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';
}