1class Solution {2public:3int maxEnvelopes(vector<vector<int>> &envelopes) {4int n = envelopes.size();5sort(envelopes.begin(), envelopes.end(),6[](auto &l, auto &r) { return l[0] == r[0] ? l[1] > r[1] : l[0] < r[0]; });7int len = 0;8for (auto &cur : envelopes) {9if (len == 0 || envelopes[len - 1][1] < cur[1])10envelopes[len++] = cur;11else12*lower_bound(envelopes.begin(), envelopes.begin() + len, cur,13[](auto &l, auto &r) { return l[1] < r[1]; }) = cur;14}15return len;16}17};