LeetCode 2407 Longest Increasing Subsequence II - Implementation

The code

class SegmentTree:
    def query(l, r):  // max in range
    def update(i, val):  // point update

tree = SegmentTree(max(nums) + 1)

for num in nums:
    left = max(0, num - k)
    right = num - 1
    maxLen = tree.query(left, right) if left <= right else 0
    tree.update(num, maxLen + 1)

return tree.query(0, max(nums))

Time: O(nlogm)O(n \log m) where mm is max value. Space: O(m)O(m) for tree.