Pagini recente » Cod sursa (job #575172) | Cod sursa (job #3182707) | Cod sursa (job #1261110) | Cod sursa (job #546008) | Cod sursa (job #1494458)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
struct ebola
{
int valoare;
int pozitie;
}v[300001];
bool cmp(const ebola &a,const ebola &b)
{
return a.valoare < b.valoare;
}
int n, D, k, inceput = 1, sfarsit = 1, i;
int solution[300001], x[300001];
int main()
{
fin >> n >> D;
for(i = 1; i <= n; i ++)
{
fin >> v[i].valoare;
v[i].pozitie = i;
}
sort(v + 1, v + n + 1, cmp);
solution[v[1].pozitie] = ++k;
x[1] = 1;
int a;
int b;
for(i = 2; i <= n; i ++)
{
a = v[ x[inceput] ].valoare;
b = v[ x[inceput] ].pozitie;
if(v[i].valoare - a >= D)
{
inceput ++;
solution[v[i].pozitie] = solution[b];
x[++sfarsit] = i;
}
else
{
solution[v[i].pozitie] = ++k;
x[++sfarsit] = i;
}
}
fout << k << '\n';
for(i = 1; i <= n; i ++)
{
fout << solution[i] << '\n';
}
return 0;
}