模板 - 最长上升/下降子序列(旧)
int lisUpMax(int A[],int n){
int maxn = 1;
int Ser[n+10];
memset(Ser,0x3f,sizeof(Ser));
Ser[1] = A[1];
for (int i = 2;i <= n;i ++){
int l = 1,r = maxn;
while (l <= r){
int m = (l+r)>>1;
if (Ser[m] > A[i]) r = m-1;
else l = m+1;
}
if (l == maxn+1){
maxn ++;
}
Ser[l] = A[i];
}
return maxn;
}
int lisDownMax(int A[],int n){
int maxn = 1;
int Ser[n+10];
fill(Ser,Ser+n+10,-INF);
Ser[1] = A[1];
for (int i = 2;i <= n;i ++){
int l = 1,r = maxn;
while (l <= r){
int m = (l+r)>>1;
if (Ser[m] < A[i]) r = m-1;
else l = m+1;
}
if (l == maxn+1) {
maxn ++;
}
Ser[l] = A[i];
}
return maxn;
}