1. class Solution {
    2. public:
    3. int numRescueBoats(vector<int>& people, int limit) {
    4. sort(people.begin(), people.end());
    5. int count = 0;
    6. vector<bool> used(people.size(), false);
    7. for (int i = (int) people.size() - 1; i >= 0; --i) {
    8. if (used[i])
    9. continue;
    10. ++count;
    11. auto pt = upper_bound(people.begin(), people.begin() + i, limit - people[i]);
    12. if (pt == people.begin())
    13. continue;
    14. do {
    15. --pt;
    16. if (!used[pt - people.begin()]) {
    17. used[pt - people.begin()] = true;
    18. break;
    19. }
    20. } while (pt != people.begin());
    21. }
    22. return count;
    23. }
    24. };