ACWing 896 最長上公升子串行 II

2021-10-19 15:10:27 字數 1285 閱讀 1568

給定乙個長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來存每條反鏈的最後乙個數字。**如下:

#include

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

log⁡n)

o(n\log n)

o(nlogn)

,空間o(n

)o(n)

o(n)

acwing 896 最長上公升子串行 II

給定乙個長度為n的數列,求數值嚴格單調遞增的子串行的長度最長是多少。輸入格式 第一行包含整數n。第二行包含n個整數,表示完整序列。輸出格式 輸出乙個整數,表示最大長度。資料範圍1 n 100000 1 n 100000,109 數 列中的數 109 109 數列中的數 109 輸入樣例 7 3 1 ...

Dp 最長上公升子串 最長上公升子串行

乙個數的子串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 等等。這些子串中最長...

AcWing 895 最長上公升子串行

題目描述 給定乙個長度為n的數列,求數值嚴格單調遞增的子串行的長度最長是多少。輸入格式 第一行包含整數n。第二行包含n個整數,表示完整序列。輸出格式 輸出乙個整數,表示最大長度。資料範圍 1 n 1000,10 9 數列中的數 10 9 輸入樣例 7 3 1 2 1 8 5 6輸出樣例 4分析 設用...