Pagini recente » Solutia problemei shoturi | Cod sursa (job #1738343) | Cod sursa (job #2009927) | Cod sursa (job #1981760) | Cod sursa (job #1489442)
#include <fstream>
#include <queue>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("partitie.in");
ofstream out("partitie.out");
const int MAX_N = 300000;
struct Element {
int val;
int ind;
};
struct Group {
int th;
int ind;
} gAux;
class GroupCompare {
public:
bool operator ()(Group A, Group B) {
return A.th > B.th;
}
};
bool elSort(Element A, Element B) {
return A.val < B.val;
}
priority_queue < Group, vector < Group >, GroupCompare > q;
int nGroup;
Element V[MAX_N + 1];
int Sol[MAX_N + 1];
int main() {
int n, d, i, th;
in >> n >> d;
for(i = 1; i <= n; i++) {
in >> V[i].val;
V[i].ind = i;
}
sort(V+1, V+n+1, elSort);
nGroup = 1;
q.push({V[1].val + d, 1});
Sol[V[1].ind] = 1;
for(i = 2; i <= n; i++) {
gAux = q.top();
if(V[i].val < gAux.th) {
nGroup++;
q.push({V[i].val + d, nGroup});
Sol[V[i].ind] = nGroup;
}
else {
q.pop();
Sol[V[i].ind] = gAux.ind;
q.push({V[i].val + d, gAux.ind});
}
}
out << q.size() << '\n';
for(i = 1; i <= n; i++) {
out << Sol[i] << '\n';
}
return 0;
}