Optimal Algorithmic Approach
Patience sorting with binary search for O(n log n).
Core Invariants & Edge Cases
- DP: dp[i] = max length ending at index i; O(n²)
- Binary search + patience sorting: maintain a 'tails' array; O(n log n)
- Tails[i] = smallest tail element of all IS of length i+1