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;
}
};