class Solution {
public:
    vector<vector<int>> rtn;
    int k;
    vector<vector<int> > FindContinuousSequence(int sum) {
        k = sum;
        vector<int> presum(k, 0);
        for (int i = 1; i < k; i++) {
            presum[i] += presum[i - 1] + i;
        }

        for (int i = 1; i < k - 1; i++) {
            vector<int> res = helper(i, k - 1, presum);
            if (res.size()) {
                rtn.push_back(res);
            }
        }
        return rtn;
    }

    vector<int> helper(int l, int r, vector<int> presum) {
        int lo = l, hi = r;
        for (; lo < hi;) {
            int mid = lo + hi >> 1;
            if (presum[mid] - presum[l - 1] < k) lo = mid + 1;
            else hi = mid;
        }
        vector<int> res = {};
        if (presum[lo] - presum[l - 1] == k) {
            for (int i = l; i <= lo; i++) {
                res.push_back(i);
            }
        }
        return res;
    }

};