這道題就是求最長上公升子串行,就是多了個尋找下標編號並要求下標字典序最小,是下標不是子串行;
#include
#include
#include
#include
#include
using
namespace std;
const
int maxn=
1e5+5;
int a[maxn]
,len[maxn]
,dp[maxn]
,res[maxn]
;//a代表原始陣列,len為當前最長子序列的個數,
//dp只是用來輔助記錄大小的,不是真正的所選序列
//res為最終答案下標的最小序列
int cnt;
intmain()
else
}memset
(res,0,
sizeof
(res));
for(
int i=n;i>=
1;i--
)//從後往前保證下標和最小
cout<
for(
int i=
1;i) cout<
<
<
" ";
cout<
<
}
求最長上公升子串行
q 有乙個長為n的數列a0,a1,an 1。求出這個序列中最長的上公升子串行的長度。上公升子串行指的是對於任意的i大致思路是這樣的,初始設定乙個最大長度maxlength為0,從數列的第一項開始遍歷,只要當前項大於前一項則加入,否則繼續遍歷,直至此次遍歷結束。然後與maxlength做對比,如果大於...
求最長上公升子串行
由n個不相同的整數組成的數列,記為 a 1 a 2 a n 且a i a j i j 例如,3,18,7,14,10,12,23,41,16,24.若存在i1 i2 3 e且有a i1 2 e 則稱其為長度為e的不下降子串行。如上例中3,18,23,24就是乙個長度為4的不下降子串行,同時也有3,7...
求最長上公升子串行
通常求最長上公升子串行的做法是兩層for迴圈,這裡從別人那裡學會了另一種sao操作 includeusing namespace std int n int a 500005 int up 500005 儲存上公升的長度 int down 500005 下降的長度 int u 500005 最大化上...