题型:同Poj 1631.
思路:注意非升子序列需要考虑相等的情况,在二分的时候需要注意。
if
(x
>
best[
0
]) {
best[ 0 ] = x;
continue ;
}
if (x <= best[sol - 1 ]) { // key
best[sol ++ ] = x;
continue ;
}
int low = 0 , high = sol - 1 , mid, ans;
while (low <= high) { // key
mid = (low + high) / 2 ;
if (best[mid] < x) {
high = mid - 1 ;
ans = mid;
} else if (best[mid] > x) {
low = mid + 1 ;
} else {
low = mid + 1 ;
ans = mid;
}
}
best[ans] = x;
best[ 0 ] = x;
continue ;
}
if (x <= best[sol - 1 ]) { // key
best[sol ++ ] = x;
continue ;
}
int low = 0 , high = sol - 1 , mid, ans;
while (low <= high) { // key
mid = (low + high) / 2 ;
if (best[mid] < x) {
high = mid - 1 ;
ans = mid;
} else if (best[mid] > x) {
low = mid + 1 ;
} else {
low = mid + 1 ;
ans = mid;
}
}
best[ans] = x;