Pagini recente » Cod sursa (job #368926) | Cod sursa (job #464243) | Cod sursa (job #3165674) | Cod sursa (job #3002901) | Cod sursa (job #922075)
Cod sursa(job #922075)
#include <fstream>
#include <algorithm>
using namespace std;
const char InFile[]="partitie.in";
const char OutFile[]="partitie.out";
const int MaxN=300111;
ifstream fin(InFile);
ofstream fout(OutFile);
int N,K,V[MaxN],P[MaxN],T[MaxN],VN[MaxN];
struct CMP
{
inline bool operator() (const int &a, const int &b)
{
return V[a]<V[b];
}
};
int main()
{
fin>>N>>K;
for(register int i=1;i<=N;++i)
{
fin>>V[i];
P[i]=i;
}
fin.close();
sort(P+1,P+1+N,CMP());
for(register int i=1;i<=N;++i)
{
VN[i]=V[P[i]];
}
int dr=1;
for(register int i=1;i<=N;++i)
{
if(!T[i])
{
T[i]=++T[0];
}
while(dr<N && (VN[dr]-VN[i]<K || T[dr]))
{
++dr;
}
if(!T[dr] && VN[dr]-VN[i]>=K)
{
T[dr]=T[i];
}
}
for(register int i=1;i<=N;++i)
{
V[P[i]]=T[i];
}
fout<<T[0]<<" ";
for(register int i=1;i<=N;++i)
{
fout<<V[i]<<" ";
}
fout.close();
return 0;
}