严格递增LIS
int solve(int x) {
int dp[maxn + 5];
memset(dp, 0x3f, sizeof(dp));
dp[0] = b[0];
int top = 1;
for(int i = 1; i < x; ++ i) {
if(b[i] > dp[top - 1]) {
dp[top] = b[i];
top++;
} else {
int pos = lower_bound(dp, dp + top, b[i]) - dp;
dp[pos] = b[i];
}
}
return top;
}
不严格递增LIS
int solve(int x) {
int dp[maxn + 5];
memset(dp, 0x3f, sizeof(dp));
dp[0] = b[0];
int top = 1;
for(int i = 1; i < x; ++ i) {
if(b[i] >= dp[top - 1]) {
dp[top] = b[i];
top++;
} else {
int pos = upper_bound(dp, dp + top, b[i]) - dp;
dp[pos] = b[i];
}
}
return top;
}