vector<int> solve(vector<int> nums, vector<int> requires) {
sort(nums.begin(), nums.end());
vector<int> res(requires.size());
int used = 0, cur = 0, w = 0;
for (int d = 0; d < requires.size(); d++) {
int pick = 0;
// accumulated apples after each day
used += requires[d];
// not enough apple
while (cur < nums.size() && used >= nums[cur])
pick += nums[cur++] - (used - requires[d]);
// trees after has enough apples for the current day
pick += (nums.size() - cur) * requires[d];
if (pick == 0) break;
res[w++] = pick;
}
return res;
}
int main() {
for (auto n : solve({10, 10, 20}, {5, 7, 2}))
cout << n << " ";
cout << endl;
}
`