def russian_dolls(envelopes: List[List[int]]) -> int:
envelopes.sort(key=lambda r: (r[0], -r[1]))
return self.length_of_lis(h for w, h in envelopes)
def length_of_lis(nums: List[int]) -> int:
if not nums:
return 0
tails = []
for num in nums:
pos = bisect.bisect_left(tails, num)
if pos == len(tails):
tails.append(num)
else:
tails[pos] = num
return len(tails)