Pagini recente » Cod sursa (job #2376001) | Cod sursa (job #186586) | Cod sursa (job #2331561) | Cod sursa (job #2773030) | Cod sursa (job #2924002)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
struct p{
int val;
int ind;
};
vector<p> a;
vector<int> ind;
vector<int> grup;
vector<bool> fol;
//9 2 11 5 3
//3 0 4 2 1
//1 4 3 0 2
//2 3 5 9 11
bool cmp(const p &x, p &y)
{
return x.val < y.val;
}
int main()
{
int n, d;
fin >> n >> d;
bool gasit = true;
int grupa = 0, j = 0;
grup.resize(n);
for(int i = 0; i < n; i++)
{
int x;
fin >> x;
a.push_back({x,i});
fol.push_back(false);
//ind.push_back(i);
}
sort(a.begin(), a.end(), cmp);
ind.resize(n);
for(int i = 0; i < n; i++)
{
ind[a[i].ind] = i;
}
while(gasit)
{
int ult = a[j].val;
grupa++;
grup[j] = grupa;
fol[j] = 1;
int j2 = -1;
for(int i = j+1; i < n; i++)
{
if(!fol[i])
{
//int temp = a[j]+dt;
if(a[i].val >= ult+d)
{
//dt += a[i]-a[j];
ult = a[i].val;
grup[i] = grupa;
fol[i] = 1;
}
else if(j2 == -1)
j2 = i;
}
}
j = j2;
if(j == -1)
gasit = false;
}
fout << grupa << "\n";
for(int i = 0; i < n; i++)
fout << grup[ind[i]] << "\n";
return 0;
}