1. 程式人生 > >noi.ac #46 最長上升子序列

noi.ac #46 最長上升子序列

nlogn 答案 相同 pan math nlog 保留 個數 時間復雜度

\(des\)
長度為 \(n\) 的序列 \(A\),從中刪去恰好 \(k\) 個元素(右邊的元素往左邊移動),記 \(cnt\) 為新

序列中 \(Ai = i\) 的元素個數(即權值與下標相同的元素的個數)。求 \(cnt\) 的最大值。

\(sol\)
\(n ^ 2\) dp
\(f_i\) 表示只保留 \(i\) 個的答案
轉移
\(f_j = max(f_j, f_{j-1} + (x == j), j = min(i, m) -> 1\)

考慮 \(i\) 轉移到 \(j\) 的條件 \((i < j);\) \(A_i < A_j\)\(A_j - A_i < j - i\)


移項:\(i - A_i <= j - A_j\)\(A_i < A_j\)
轉化為二維偏序問題
\(i - A_i\) 為第一關鍵字,\(A_j\) 為第二關鍵字對 \(A\) 排序
\(i - A_i < j - A_j\) 的條件一定滿足
對第二維做 lcs 即可
時間復雜度 \(O(nlogn)\)

noi.ac #46 最長上升子序列