Pagini recente » Statistici Sirbu Eduard (SirbuEdi) | Istoria paginii utilizator/chiuveta | Istoria paginii utilizator/freak95 | Istoria paginii utilizator/danhumeniuc | Cod sursa (job #1001457)
#include <fstream>
#include <algorithm>
#define In "partitie.in"
#define Out "partitie.out"
#define Nmax 300005
using namespace std;
struct vect
{
int value, pos;
bool operator <(const vect& A)const
{
return value<A.value;
}
};
vect a[Nmax];
int sol[Nmax],cnt, n, k;
inline void Read()
{
ifstream f(In);
f >> n >> k;
for(int i = 1;i <= n; ++i)
{
f >> a[i].value;
a[i].pos = i;
}
f.close();
}
inline void Solve()
{
sort(a+1,a+n+1);
int i,j;
for(i = j = 1;i <= n; ++i,++j)
{
if(!sol[a[i].pos])
sol[a[i].pos] = ++cnt;
for(;j <= n && a[j].value - a[i].value < k; ++j);
sol[a[j].pos] = sol[a[i].pos];
}
}
inline void Write()
{
ofstream g(Out);
g<<cnt<<"\n";
for(int i = 1;i <= n; ++i)
g<<sol[i]<<"\n";
}
int main()
{
Read();
Solve();
Write();
return 0;
}