\(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\} \]