Pagini recente » Cod sursa (job #3271903) | Cod sursa (job #661023) | Cod sursa (job #1967681) | Cod sursa (job #494361) | Cod sursa (job #2924050)
#include <algorithm>
#include <queue>
#include <fstream>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
const int MAXN = 300001;
pair <int, int> v[MAXN];
int vans[MAXN];
int main()
{
int n, d, i, grupe = 1;
fin >> n >> d;
for(i = 1; i <= n; i++)
fin >> v[i].first, v[i].second = i;
sort(v + 1, v + n + 1);
priority_queue <pair <int, int>> pq;
pq.push({-v[1].first, 1});
vans[v[1].second] = 1;
for(i = 2; i <= n; i++)
{
if(v[i].first + pq.top().first < d)///diferenta dintre elemntul minim si elementul curent
{
grupe++;
pq.push({-v[i].first, grupe});
vans[v[i].second] = grupe;
}
else
{
int grupa = pq.top().second;
pq.pop();
pq.push({-v[i].first, grupa});
vans[v[i].second] = grupa;
}
}
fout << grupe << '\n';
for(i = 1; i <= n; i++)
fout << vans[i] << '\n';
return 0;
}