HANGRY_Sol&Cekas發表於2024-08-13

\(T_4\) 單調區間

題目描述

一句話題意:給定一個排列 \(a\) 算出有多少個區間 \([l , r]\) , 滿足其可以劃分為一個單調遞增子序列和單調遞減子序列,其中單調遞增子序列長度 \(\ge 1\) , 單調遞減子序列長度可為 \(0\) . \(n \le 10 ^ 5\)

題解

感覺大家在證分治做法的複雜度,我也不淌這潭渾水了,本做法為 \(n \log n\) , 使用樹狀陣列和優先佇列資料結構。

首先考慮一個結論,對於一個不滿足條件的區間 \([l , r]\) ,其一定滿足如下條件:

對於 \(l \le i < j < k < l\) , 滿足:

\[a_k < a_l < a_i < a_j \ \lor \ a_j < a_i < a_l < a_k \]

手模一下就能發現這樣構成不了合法解。

我們又發現假設我們目前為 \(l\) , 那麼對於上面的結論來說,去找最大滿足上述結論的 \(\max\{i\}\) .

那麼 \(l\) 貢獻出的答案為 $$l - \max{i}$$

當然,我們稱 \(\max\{i\}\)\(l\) 的左端點 \(L_l\)

對於 \(\alpha < l\) , 那麼 \([i , l] \ \left(i \le L_{\alpha}\right)\) 區間同樣取不到。

於是得到進階結論:

對於排列 \(a\) : ( \(L\) 定義不變 )

\[ans = \sum_{i = 1}^{n} i - \max_{1 \le j \le i}\{L_j\} \]

相關文章