最长不上升子序列长度
令 d p [ i ] dp[i] dp[i]表示:最长不上升子序列长度为 i i i时,最优的结尾元素。
for(int i=2;i<=n;i++)
{
if(a[i]<=dp[len])
dp[++len]=a[i];
else
{
int p=upper_bound(dp+1,dp+1+len,a[i],greater<int>())-dp;
dp[p]=a[i];
}
}
len==maxlength;//贪心思想 O(nlogn)
最长上升子序列长度
for(int i=2;i<=n;i++)
{
if(a[i]>dp[len])
dp[++len]=a[i];
else
{
int p=lower_bound(dp+1,dp+1+len,a[i])-dp;
dp[p]=a[i];
}
}
len==maxlength;//贪心思想 O(nlogn)
最长下降子序列长度
for(int i=2;i<=n;i++)
{
if(a[i]<dp[len])
dp[++len]=a[i];
else
{
int p=lower_bound(dp+1,dp+1+len,a[i],greater<int>())-dp;
dp[p]=a[i];
}
}
len==maxlength;//贪心思想 O(nlogn)
最长不下降子序列长度
for(int i=2;i<=n;i++)
{
if(a[i]>=dp[len])
dp[++len]=a[i];
else
{
int p=upper_bound(dp+1,dp+1+len,a[i])-dp;
dp[p]=a[i];
}
}
len==maxlength;//贪心思想 O(nlogn)