最长不下降子序列 (O(nlogn)算法)
生活随笔
收集整理的這篇文章主要介紹了
最长不下降子序列 (O(nlogn)算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
分析:
定義狀態dp[i]表示長度為i的最長不下降子序列最大的那個數。
每次進來一個數直接找到dp數組第一個大于于它的數dp[x],并把dp[x - 1]修改成 那個數。就可以了
AC代碼:
# include <iostream> # include <cstdio> # include <cstring> # include <algorithm> using namespace std; const int N = 100012; int dp[N],n,pre[N],x,y,xh[N],a[N]; void out(int k){if(k)out(pre[k]);else return;printf("%d ",a[k]); } int main(){memset(dp,0x3f3f3f3f,sizeof dp);for(int i = 1;i <= n;i++){scanf("%d",&a[i]);y = upper_bound(dp + 1,dp + n + 1,a[i]) - dp;dp[y] = a[i];xh[y] = i;pre[i] = xh[y - 1]; }int len = lower_bound(dp + 1,dp + n + 1,dp[0]) - dp - 1;printf("%d\n",len);out(xh[len]);return 0; }?
轉載于:https://www.cnblogs.com/lzdhydzzh/p/7673831.html
總結
以上是生活随笔為你收集整理的最长不下降子序列 (O(nlogn)算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黄花机场过夜停车场收费标准,黄花机场停车
- 下一篇: FFT快速傅式变换算法halcon算子,