class Solution {
  public:
    vector<int> so(int l, int r, vector<int>& input) {
        if (l > r) {
            vector<int>k;
            return k;
        }
        if (l == r) {
            vector<int>k;
            k.push_back(input[l]);
            return k;
        }
        vector<int>le = so(l, (l + r) >> 1, input);
        vector<int>ri = so(((l + r) >> 1) + 1, r, input);
        vector<int>ans;
        int l1 = 0, l2 = 0;
        while (l1 < le.size() && l2 < ri.size()) {
            if (le[l1] < ri[l2])ans.push_back(le[l1++]);
            else ans.push_back(ri[l2++]);
        }
        if (l1 < le.size())for (; l1 < le.size(); l1++)ans.push_back(le[l1]);
        if (l2 < le.size())for (; l2 < ri.size(); l2++)ans.push_back(ri[l2]);
        return ans;
    }
    vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
        input = so(0, input.size() - 1, input);
        vector<int>ans;
        for (int i = 0; i < k && i < input.size(); i++)
            ans.push_back(input[i]);
        return ans;
    }
};