Pagini recente » Cod sursa (job #885233) | Cod sursa (job #136421) | Cod sursa (job #2857876) | Cod sursa (job #1514384) | Cod sursa (job #1492646)
#include <fstream>
#include <algorithm>
#include <queue>
#define DIM 300005
using namespace std;
ifstream fin("partitie.in");
ofstream fout("partitie.out");
int n, d;
struct data {
int x;
int y;
}v[DIM];
bool cmp(const data& a, const data &b){
return a.x < b.x;
}
int sol[DIM];
struct cmp1{
bool operator()(const pair<int, int> &a, const pair<int, int> &b){
return a.first > b.first;
}
};
priority_queue < pair<int, int>, vector< pair<int, int> >, cmp1 > H;
int main() {
fin >> n >> d;
for (int i = 1; i <= n; i++) {
fin >> v[i].x;
v[i].y = i;
}
int k = 0;
sort(v + 1, v + n + 1, cmp);
sol[v[1].y] = ++k;
H.push(make_pair(v[1].x, v[1].y));
for (int i = 2; i <= n; i++) {
int x = H.top().first;
int y = H.top().second;
if (v[i].x - x >= d){
H.pop();
sol[v[i].y] = sol[y];
H.push(make_pair(v[i].x, v[i].y));
}
else {
sol[v[i].y] = ++k;
H.push(make_pair(v[i].x, v[i].y));
}
}
fout << k << "\n";
for (int i = 1; i <= n; i++)
fout << sol[i] << "\n";
return 0;
}
//Trust me, I'm the Doctor!
//Miriam e tare!