題解-CF1479


CF1479A Searching Local Minimum

類似二分答案的東西。維護一個滿足 \(a_l < a_{l - 1}, a_r < a_{r + 1}\) 的區間。這里面必然有一個局部極小值。

如果我們查詢 \(a_{mid - 1}, a_{mid}, a_{mid + 1}\),要么得出 \(a_mid\) 是局部極小值,要么得出一個更小的這樣的區間。

aclink

CF1479B1 Painting the Array ICF1479B2 Painting the Array II

一模一樣,放在一起說得了。

以 B1 為例。

維護一個 \(dp\)\(dp_{i, j}\) 表示算到第 \(i\) 個點,\(a^{(0)}\)\(a^{(1)}\) 的最后兩個數是 \(a_i\)\(j\)

轉移分為兩類討論,第一類是 \(a_i\) 覆蓋了 \(a_{i - 1}\),第二類是 \(a_i\) 沒有覆蓋 \(a_{i - 1}\)

\[dp_{i, j} = \begin{cases} dp_{i - 1, j} + [a_i \neq a_{i - 1}] (j \neq a_{i - 1})\\ \\max(dp_{i - 1, k} + [k \neq a_i]) (j = a_{i - 1}) \end{cases} \]

aclink1aclink2

CF1479C Continuous City

可以立馬簡化題意,如果 \(L \neq 1\) 就把 \(1\) 號節點向 \(2\) 號節點連長度為 \(L - 1\) 的邊,接下來的起點就是 \(2\) 號了。這樣可以把轉化為要求路徑長度是 \([1, k]\) 的情況。

首先考慮一個嚴格弱化問題,如果要求路徑數量是 \(k\)

考慮二進制拆分,第 \(f_t\) 個節點表示路徑數量是 \(2^t\) 的情況。對於節點 \(f_x\),只要把起點連向他,\(\forall t < x, f_t\) 連向他即可。

對於終點,起點連向他,剩下的直接二進制拆分就好了。

這個拓展版本也就很好做了:第 \(f_t\) 個節點表示的是路徑長度是 \([1, 2^t]\) 的情況就可以輕松構造出來。

aclink

CF1479D Odd Mineral Resource

介紹兩種方法。

法 1

這是一個有關樹上數顏色的問題,用樹上莫隊。

對顏色編號進行分塊,塊內維護可能成為答案的顏色。

修改時,如果此顏色的出現次數是奇數,那么就認為這種顏色可能成為答案。

查詢的時候,對於整塊掃描可能成為答案的顏色。對於一個掃到的數 \(x\),如果出現次數確實是奇數就停,否則就把 \(x\) 從可能成為答案的數中刪除。散塊暴力即可。

時間復雜度 \(\Theta(n \sqrt m)\)

喜提最劣解。

aclink

法 2

出現奇數次可以用異或來處理。

如果對於每一個元素,進行隨機賦值。我們查詢樹上 \(u\)\(v\) 上,編號在 \(l\)\(r\) 的權值異或和,如果是 \(0\) 那么我們就認為答案是 -1

然后我們進行二分答案,查詢一下 \([l, mid]\),如果異或和不是 \(0\) 就在 \([l, mid]\) 往下做,否則 \([mid + 1, r]\) 的異或和一定不是 \(0\),在 \([mid + 1, r]\) 往下做。

這個可以主席樹維護。由於主席樹的優良性質,我們可以直接在主席樹上二分。時間復雜度 \(\Theta((n + m) \log n)\)

喜提最優解。

aclink

CF1479E School Clubs

設勢能函數 \(\phi(A) = \sum\limits_{i = 1}^n f(a_i)\)

\(s = \sum\limits_{i = 1}^n a_i\)

單次操作勢能函數的期望變化量必然是 \(-1\)

\[\sum\limits_{i = 1}^n \frac{a_i}{s} \frac{1}{2}( - f(a_i) + f(1) + f(a_i - 1) + \sum\limits_{j \neq i}^{n} \frac{a_j}{s} ( - f(a_i) + f(a_i - 1) - f(a_j) + f(a_j + 1)) = -1 \]

\[\sum\limits_{i = 1}^n \frac{a_i}{s} ( 2 - f(a_i) + f(1) + f(a_i - 1) + \frac{s - a_i}{s} (f(a_i - 1) - f(a_i)) + \frac{s - a_i}{s} (f(a_i + 1) - f(a_i))) = 0 \]

\[\frac{x}{s} ( 2 - f(x) + f(1) + f(x - 1) + \frac{s - x}{s} (f(x - 1) - f(x)) + \frac{s - x}{s} (f(x + 1) - f(x))) = 0 \]

對於 \(x = 0\),那么已經滿足;對於 \(x \neq 0 :\)

\[2 s + f(1) s + (f(x - 1) - f(x)) s + (s - x) (f(x - 1) - f(x)) + (s - x) (f(x + 1) - f(x)) = 0 \]

\[f(x + 1) = \frac{- 2 s - f(1) s - (2s - x) f(x - 1) + (3s - x) f(x)}{s - x} \]

為了方便,讓 \(f(1) = -2\)。並且為了讓最終狀態下勢能函數是一定的,我們令 \(f(0) = 0\)。於是這個東西就可以遞推。

注意一個細節:我們用分數表示函數,可以避免每次都求一次逆元。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM