Pagini recente » Cod sursa (job #1910124) | Cod sursa (job #1136959) | Cod sursa (job #2494886) | Cod sursa (job #3220706) | Cod sursa (job #1494289)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
struct ebola
{
int valoare;
int pozitie;
}v[300010];
int cmp(ebola a, ebola b)
{
return a.valoare < b.valoare;
}
int n, D, k, start = 1, end = 1;
int solution[300010], x[300010];
int main()
{
fin >> n >> D;
for(int 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;
for(int i = 2; i <= n; i ++)
{
int a = v[ x[start] ].valoare;
int b = v[ x[start] ].pozitie;
if(v[i].valoare - a >= D)
{
start ++;
solution[v[i].pozitie] = solution[b];
x[++end] = i;
}
else
{
solution[v[i].pozitie] = ++k;
x[++end] = i;
}
}
fout << k << '\n';
for(int i = 1; i <= n; i ++)
{
fout << solution[i] << '\n';
}
return 0;
}