Pagini recente » Cod sursa (job #2364307) | Cod sursa (job #2989310) | Cod sursa (job #1953260) | Cod sursa (job #2252430) | Cod sursa (job #1000948)
#include <iostream>
#include <fstream>
#include <algorithm>
#define NMax 300010
using namespace std;
int nrsub;
int n, D;
int sol[NMax];
struct multime
{
int value, position;
bool operator < (const multime &A) const
{
return value < A.value;
}
};
multime a[NMax];
inline void Read()
{
ifstream f ("partitie.in");
f>>n>>D;
int i;
for (i=1; i<=n; ++i)
{
f>>a[i].value;
a[i].position = i;
}
f.close();
}
inline void Solve()
{
sort(a+1, a+n+1);
int Left, Right;
for (Left = 1, Right = 2; Left <= n; ++Left)
{
if (!sol[a[Left].position])
sol[a[Left].position] = ++nrsub;
while (sol[a[Right].position])
++Right;
while (Right <= n && a[Right].value - a[Left].value < D)
++Right;
if (Right <= n && a[Right].value - a[Left].value >= D)
sol[a[Right].position] = sol[a[Left].position];
}
}
inline void Write()
{
ofstream g("partitie.out");
g<<nrsub<<"\n";
int i;
for (i=1; i<=n; ++i)
g<<sol[i]<<"\n";
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}