class Solution {public: int numRescueBoats(vector<int>& people, int limit) { sort(people.begin(), people.end()); int count = 0; vector<bool> used(people.size(), false); for (int i = (int) people.size() - 1; i >= 0; --i) { if (used[i]) continue; ++count; auto pt = upper_bound(people.begin(), people.begin() + i, limit - people[i]); if (pt == people.begin()) continue; do { --pt; if (!used[pt - people.begin()]) { used[pt - people.begin()] = true; break; } } while (pt != people.begin()); } return count; }};