class Solution { public: int LIS(vector<int>& arr) { if(arr.size()==0)return 0; vector<int>dp(arr.size()+10,0x3f3f3f3f); int len=0; for(auto x:arr) { if(x>dp[len])dp[++len]=x; else { int l=0,r=len; while(l<r) { int mid=(l+r)>>1; if(dp[mid]>=x)r=mid; else l=mid+1; } dp[l]=x; } } return len+1; } };