08.03

purplevine發表於2024-08-04

CF1787H

考慮減少量,設 \(a_i=b_i-a_i\),那麼減少的分數是 \(\min\{a_i, k \cdot t\}\),我們要最小化之。

如果沒有 \(a_i\) 的限制,按 \(k\) 排序取。考慮到 \(a_i\) 的限制,把數分開,如果頂到了限制丟到最後面是不劣的,因此把 \(k\) 從大到小排序做 dp,要麼透過得到 \(kt\) 要麼不透過得到 \(a_i\)

\(f_{i, j} = \min\{f_{i-1, j}+a_i, f_{i-1, j-1} + k\cdot t\}\)

題解告訴我們考慮 \(g_{i, j} = f_{i, j}-f_{i,j-1}\),且 \(g_{i-1, j}\) 的增長速度快於 \(k_i \cdot j\)

\(g_{i, j} = g_{i, j-1} + \min\{g_{i-1, j} + a_i, k_ij\} - \min\{g_{i-1, j-1}+a_i, k_i (j-1)\}\)

存在一個分界點,在其左邊 \(f_{i-1, j}+a_i\) 更小,在右邊 \(f_{i-1, j-1} + k_i \cdot j\) 更小。

平衡樹維護差分陣列,找分界點時需要找差分陣列與 \(k_i \cdot j - a_i\) 的交點,進行單點插入以及字尾加即可。

abc305h

複合的順序是按 \(b_i/(a_i-1)\) 排序後依次複合。

題解告訴我們代價關於段長度是凸的,做 wqs 二分即可。

至於代價怎麼快速算,因為每一段複合起來不超過 \(C\),最多隻有 \(O(\log C)\) 個元素,可以直接列舉預處理。

另一位老哥告訴我們可以決策單調性分治,好像能懂,但不是很懂複雜度。

P9266

貢獻滿足四邊形不等式。套路性進行 cdq,問題只有怎麼求區間貢獻。

建廣義笛卡爾樹,一邊挪指標一邊統計貢獻,當然也可以廣義笛卡爾樹上斜率最佳化 dp,都太複雜。

這裡的 cdq 有點意思,是強制中序轉移的 cdq,演算法流程大概形如:

  1. 處理 \([l, mid]\)

  2. \([l, mid]\) 更新 \([mid+1, r]\)

  3. 處理 \([mid+1, r]\)

其中第二步是,先求出 \([mid+1, r]\) 中點的最優決策,再分治到兩邊繼續求解,同層指標最多共掃一遍,因此指標移動次數是 \(O(n \log n)\) 的,\(n\) 為區間長度。

四邊形不等式讓我們可以做到每條斜線均攤 \(O(n)\),總體 \(O(nm)\) 的優秀複雜度,不過這道題因為貢獻無法快速算只能用挪指標的決策單調性分治。異層間可以打亂順序比較方便,若同層則需要用欽定中序的 cdq 分治解決。

P9338

AB 內部的順序不會變,變了肯定不好。

只要能排出 \(\leq k\) 的方案數就行了。

做 dp:\(f_{l, r}\) 表示匹配第 \([l, r]\) 個 A 的最少代價。有 \(w(l, r) = \sum \max\{0, b_i-l+1\}\),其中 \(b_i\) 為第 \(i\) 個 A 前的 B 的個數。

\(c\) 是滿足四邊形不等式的,可以決策單調性分治。但事實上並不用那麼麻煩。

顯然 \(b_i\) 不減,找到一個位置 \(p\) 使得 \(b_i-l+1 > 0\),於是式子是字首和的形式,\(f_i = \min \{f_j + \sum_{k=p_j}^{i} (b_k-i+1)\} = \min \{f_j+S_b(i)-S_b(p_j-1)\}\),可以斜率最佳化解決。

感覺斜率最佳化已經挺遙遠了啊。別用斜率最佳化了,還是二分佇列好理解。那麼我們插入關於 \(j\) 的函式,任意兩個函式最多一個交點,詢問點也是單調的,於是按順序維護將要成為答案的決策即可。

gym102331J

\(f_{u, i, 0/1}\):根為 \(u\),已經匹配 \(i\) 對,\(u\) 是否已經被匹配。

因為匹配可以構造成一個費用流模型,這是一個凸函式,因此可以做閔可夫斯基和,在鏈上分治 \(O(n \log n)\)

否則進行輕重鏈剖分,輕鏈之間分治合併,重鏈用鏈的合併方法合併,複雜度不會算。

好像是經典的樹上資訊合併方法。仔細想想確實沒用到什麼性質。

gym102331H

怎麼又是這道題啊。

一個著名的模擬費用流做法是每次取最大子段加入答案並將該子段全部取反,顯然過不去。

但這告訴我們答案是凸的。線段樹,每個節點維護一個函式,表示區間選 \(i\) 段的答案,為了合併需要記錄是否包含左右端點,一個節點上四個函式。單次詢問可以 wqs 二分,在每個節點存的函式那裡二分找到切點並累加數值(求和函式的切點),單次是 \(O(\log^2 n)\) 的。

事實上可以離線後整體二分,這裡整體二分的大概是切線斜率,於是可以在函式上挪指標了。整體二分中一層的一個函式最多被整體遍歷一遍,於是總複雜度是 \(O(q \log n \log V)\) 的。

預處理的複雜度是 \(O(n \log n)\)

LOJ6289