**Problem Statement:**
Given the required input arguments, write an efficient algorithm to solve the **Longest Increasing Subsequence** problem. Implement the required logic as specified by standard definitions for this classic algorithmic challenge.
**Hint / Expected Approach:**
dp[i] = max(dp[j]+1) j<i OR patience sort O(n log n)
**Edge Cases to Consider:**
- (1) All same elements
- (2) Strictly decreasing
- (3) Single element