class Solution {
public:
vector<int> h;
int idx;
void down(int u) {
int t = u;
if (u * 2 <= idx && h[u * 2] > h[t])
t = u * 2;
if (u * 2 + 1 <= idx && h[u * 2 + 1] > h[t])
t = u * 2 + 1;
if (t != u) {
swap(h[t], h[u]);
down(t);
}
}
vector<int> GetLeastNumbers_Solution(vector<int> v, int k) {
if (k > v.size())
return {};
h = vector<int>(k + 1);
for (int i = 0; i < k; i ++ )
h[i + 1] = v[i];
idx = k;
for (int i = k / 2; i > 0; i -- )
down(i);
for (int i = k; i < v.size(); i ++ ) {
if (v[i] < h[1]) {
h[1] = v[i];
down(1);
}
}
vector<int> ans(k);
for (int i = 0; i < k; i ++ )
ans[i] = h[i + 1];
return ans;
}
};