P5609 [Ynoi2013] 對資料結構的愛

275307894a發表於2024-03-05

題面傳送門

好像搞了個神秘做法。

考慮離線掃描線,用一個 fhq-Treap 維護所有的詢問現在長什麼樣,然後每次操作就整體加 \(A_i\)\(\geq p\) 的減去 \(p\),這個可以分裂之後打整體標記,然後用那個值域相交的 fhq-Treap 合併實現。

然後你發現這樣就過了。

構造一下卡不掉,於是考慮給這個東西編一個勢能。

設現在 fhq-Treap 維護的東西為 \(a\) 序列,定其勢能為 \(\sum\limits_{i=1}^{n-1}{\log(a_{i+1}-a_i)}\),容易發現的是總勢能不會超過\(O(m\log V)\),因此我們來考慮減少一個勢能的代價。

fhq-Treap 可以在連續段個數乘以 \(\log\) 的時間複雜度內合併兩個值域相交的集合,這裡連續段指的是合併完之後極長連續的一段滿足來自同一邊。我們考慮一個最簡單的情形,假設其中一個集合為 \(a_1,a_2,a_3\),另一個集合為 \(b_1,b_2\),合併後為 \(a_1,b_1,a_2,b_2,a_3\)

原來的勢能為 \(\log(a_2-a_1)+\log(a_3-a_2)+\log(b_2-b_1)\)。考慮 \(\min(\log(a_2-b_1),\log(b_2-a_2))\leq \log(b_2-a_2)-1\),並且 \(\log(b_1-a_1)\leq\log(a_2-a_1),\log(a_3-b_2)\leq \log(a_3-a_2)\),所以總勢能至多增加 \(O(\log n)-1\)

進一步容易用上面的方法證明,如果最終連續段的個數為 \(S\),則總勢能至多增加 \(O(\log V)-\frac{1}{4}S\),所以總複雜度 \(O(n\log n+m\log m\log V)\)

這玩意的劣勢在於其複雜度是 \(O(\log V)\) 而不是 \(O(\log m)\)(說不定能證明勢能是 \(O(\log m)\) 的),但是優勢在於可以對每個點設不同的 \(p\)。因為常數比較大需要卡卡常。

submission

相關文章