給定乙個長n
nn數列a
aa,求嚴格單調遞增的子串行的最長長度。
輸入格式:
第一行包含整數n
nn。第二行包含n
nn個整數,表示完整序列。
輸出格式:
輸出乙個整數,表示最大長度。
資料範圍:
1 ≤n
≤100000
1\le n\le 100000
1≤n≤10
0000
− 10
9≤x≤
10
9-10^9\le x\le 10^9
−109≤x
≤109
x
xx是數列中的數
思路是偏序集分解定理。乙個偏序集的最長鏈的長度,就是它能分解為最少多少個反鏈的個數。在這裡可以將每個數與它的下標做成乙個pair,並定義(i,
a[i]
)<(j
,a[j
])
(i,a[i])<(j,a[j])
(i,a[i
])<(j
,a[j
])當且僅當i
a[i]
j] iia[i] j]。那麼反鏈就是指i a[i] ≥a[j ]i ia[i] ≥a[j ]的情況了。我們只需要看最少能分解出多少個反鏈即可。思路參考這裡用乙個陣列f ff來存每條反鏈的最後乙個數字。**如下: using namespace std; const int n = 100010 ;int n; int a[n] , f[n] ;// 在f[0 : r]中找到第乙個大於等於t的數字的下標 intbinary_search (int f, int r, int t) return f[l] >= t ? l :-1 ;}intmain() cout << idx << endl; return0; }時間複雜度o(n logn) o(n\log n) o(nlogn) ,空間o(n )o(n) o(n) 。 給定乙個長度為n的數列,求數值嚴格單調遞增的子串行的長度最長是多少。輸入格式 第一行包含整數n。第二行包含n個整數,表示完整序列。輸出格式 輸出乙個整數,表示最大長度。資料範圍1 n 100000 1 n 100000,109 數 列中的數 109 109 數列中的數 109 輸入樣例 7 3 1 ... 乙個數的子串bi,當b1 b2 bs的時候,我們稱這個子串是上公升的。對於給定的乙個序列 a1,a2,an 我們可以得到一些上公升的子串 ai1,ai2,aik 這裡1 i1 i2 ik n。如 對於序列 1,7,3,5,9,4,8 有它的一些上公升子串,如 1,7 3,5,9 等等。這些子串中最長... 題目描述 給定乙個長度為n的數列,求數值嚴格單調遞增的子串行的長度最長是多少。輸入格式 第一行包含整數n。第二行包含n個整數,表示完整序列。輸出格式 輸出乙個整數,表示最大長度。資料範圍 1 n 1000,10 9 數列中的數 10 9 輸入樣例 7 3 1 2 1 8 5 6輸出樣例 4分析 設用...#include
acwing 896 最長上公升子串行 II
Dp 最長上公升子串 最長上公升子串行
AcWing 895 最長上公升子串行