Pagini recente » Cod sursa (job #1001313) | Cod sursa (job #230522) | Cod sursa (job #26947) | Cod sursa (job #2830838) | Cod sursa (job #728080)
Cod sursa(job #728080)
//Include
#include <cstdio>
#include <set>
#include <vector>
#include <map>
using namespace std;
//Constante
const int oo = (int)15e8;
//Variabile
int n, dif;
int citit;
int nrMultimi;
int oldVal;
set<int> multime;
set<int>::iterator it, end, bound;
vector<int> oldOrder;
vector<int>::iterator vIt, vEnd;
map<int, int> pozitii;
//Main
int main()
{
freopen(".in", "rt", stdin);
freopen(".out", "wt", stdout);
//in >> n >> dif;
scanf("%d%d", &n, &dif);
oldOrder.reserve(n);
for(int i=1 ; i<=n ; ++i)
{
//in >> citit;
scanf("%d", &citit);
multime.insert(citit);
oldOrder.push_back(citit);
}
end = multime.end();
for( nrMultimi=1; !multime.empty() ; ++nrMultimi)
{
oldVal = -oo;
while((bound = multime.lower_bound(oldVal+dif)) != end)
{
oldVal = *bound;
pozitii[*bound] = nrMultimi;
multime.erase(bound);
}
}
//out << (nrMultimi-1) << '\n';
printf("%d\n", nrMultimi-1);
vEnd = oldOrder.end();
for(vIt=oldOrder.begin() ; vIt!=vEnd ; ++vIt)
//out << pozitii[*vIt] << '\n';
printf("%d\n", pozitii[*vIt);
fclose(stdin);
fclose(stdout);
return 0;
}