Pagini recente » Cod sursa (job #1622435) | Cod sursa (job #65495) | Cod sursa (job #713858) | Cod sursa (job #3192801) | Cod sursa (job #1494463)
#include <fstream>
#include <algorithm>
#define valoare first
#define pozitie second
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
pair<int, int> v[300005];
int n, D, a, b;
int solution[300005], x[300005];
int main()
{
fin >> n >> D;
for(int i = 1; i <= n; i ++)
{
fin >> v[i].valoare;
v[i].pozitie = i;
}
int k = 0;
sort(v + 1, v + n + 1);
solution[v[1].pozitie] = ++k;
x[1] = 1;
int inceput = 1, sfarsit = 1;
for(int 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(int i = 1; i <= n; i ++)
{
fout << solution[i] << '\n';
}
return 0;
}