#include <iostream> #include <ranges> #include <vector> template <typename InputIt, typename OutputIt, typename Pred> std::pair<InputIt, OutputIt> copy_while(InputIt first, InputIt last, OutputIt out, Pred p); std::vector<int> take_while_sum_less_than(std::vector<int> &v, int n) { std::vector<int> out; int acc = 0; while (true) { if (v.back() + acc > n) { int next = v.back(); out.push_back(n); v.pop_back(); } } } #if __cplusplus > 202002L // #include <ranges> // #include <numeric> std::vector<int> take_while_sum_less_than(const std::vector<int> &v, int n) { int sum = 0; auto result = v | std::ranges::views::take_while([&sum, n](int x) { if (sum + x < n) { sum += x; return true; } return false; }); return std::vector<int>(result.begin(), result.end()); } #endif