Pagini recente » Cod sursa (job #759613) | Cod sursa (job #637011) | Cod sursa (job #556729) | Cod sursa (job #1408458) | Cod sursa (job #1401999)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <queue>
using namespace std;
struct elem
{
int val,poz;
elem ( int val=0, int poz=0):
val(val), poz(poz)
{
}
};
int N,D;
elem V[300008];
int S[300008];
int K;
queue < int > Q;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
void Citire()
{
int i,x;
fin>>N>>D;
for(i=1;i<=N;i++)
{
fin>>x;
V[i]=elem(x,i);
}
sort(V+1,V+N+1,[] (elem a, elem b) { return a.val<b.val;});
}
void Rezolvare()
{
int i,p;
K++;
S[V[1].poz]=1;
Q.push(1);
for(i=2;i<=N;i++)
{
p=Q.front();
if(V[i].val-D>=V[p].val)
{
Q.pop();
S[V[i].poz]=S[V[p].poz];
Q.push(i);
}
else
{
S[V[i].poz]=++K;
Q.push(i);
}
}
}
void Afisare()
{
fout<<K<<'\n';
for(int i=1;i<=N;i++)
fout<<S[i]<<'\n';
}
int main()
{
Citire();
Rezolvare();
Afisare();
return 0;
}