Pagini recente » Cod sursa (job #789704) | Borderou de evaluare (job #2014712) | Cod sursa (job #2651801) | Cod sursa (job #2367304) | Cod sursa (job #727584)
Cod sursa(job #727584)
//Include
#include <fstream>
#include <set>
#include <vector>
#include <map>
using namespace std;
//Constante
const int oo = (int)15e8;
//Variabile
ifstream in("partitie.in");
ofstream out("partitie.out");
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()
{
in >> n >> dif;
oldOrder.reserve(n);
for(int i=1 ; i<=n ; ++i)
{
in >> 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';
vEnd = oldOrder.end();
for(vIt=oldOrder.begin() ; vIt!=vEnd ; ++vIt)
out << pozitii[*vIt] << '\n';
in.close();
out.close();
return 0;
}