最长上升子序列
int LIS(int n){
int idx = 0;
dp[idx ++] = arr[0];
for(int i = 1;i < n;i ++){
if(arr[i] > dp[idx - 1]) dp[idx ++] = arr[i];
else{
int where = lower_bound(dp,dp + idx,arr[i]) - dp;
dp[where] = min(dp[where],arr[i]);
}
}
return idx;
}