一、基础
for(int i=1;i<=n;i++){
for(int j=1;j<i;j++)
if(a[j]<a[i]) f[i]=max(f[i],f[j]+1);
ans=max(ans,f[i]);
}
二、复杂度o(nlogn)
cin>>n>>k;
for(int i=0;i<n;i++){
cin>>a[i];
dp[i]=inf;
pd[i]=inf;
}
for(int i=n-1;i>=0;i--)//这里还是队友提醒,如何从找最大上升去找最大下降,只要把原数组倒过来
b[n-i-1]=a[i];
for(int i=0;i<n;i++)
*lower_bound(dp,dp+n,a[i])=a[i];//找到>=a[i]的第一个元素,并用a[i]替换; //上升
for(int i=0;i<n;i++)
*lower_bound(pd,pd+n,b[i])=b[i];//找到<=a[i]的第一个元素,并用b[i]替换;//下降
int ans1=lower_bound(dp,dp+n,inf)-dp;
int ans2=lower_bound(pd,pd+n,inf)-pd;