CF1479A Searching Local Minimum
類似二分答案的東西。維護一個滿足 \(a_l < a_{l - 1}, a_r < a_{r + 1}\) 的區間。這里面必然有一個局部極小值。
如果我們查詢 \(a_{mid - 1}, a_{mid}, a_{mid + 1}\),要么得出 \(a_mid\) 是局部極小值,要么得出一個更小的這樣的區間。
CF1479B1 Painting the Array I,CF1479B2 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}\) 。
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]\) 的情況就可以輕松構造出來。
CF1479D Odd Mineral Resource
介紹兩種方法。
法 1
這是一個有關樹上數顏色的問題,用樹上莫隊。
對顏色編號進行分塊,塊內維護可能成為答案的顏色。
修改時,如果此顏色的出現次數是奇數,那么就認為這種顏色可能成為答案。
查詢的時候,對於整塊掃描可能成為答案的顏色。對於一個掃到的數 \(x\),如果出現次數確實是奇數就停,否則就把 \(x\) 從可能成為答案的數中刪除。散塊暴力即可。
時間復雜度 \(\Theta(n \sqrt m)\)
喜提最劣解。
法 2
出現奇數次可以用異或來處理。
如果對於每一個元素,進行隨機賦值。我們查詢樹上 \(u\) 到 \(v\) 上,編號在 \(l\) 到 \(r\) 的權值異或和,如果是 \(0\) 那么我們就認為答案是 -1
。
然后我們進行二分答案,查詢一下 \([l, mid]\),如果異或和不是 \(0\) 就在 \([l, mid]\) 往下做,否則 \([mid + 1, r]\) 的異或和一定不是 \(0\),在 \([mid + 1, r]\) 往下做。
這個可以主席樹維護。由於主席樹的優良性質,我們可以直接在主席樹上二分。時間復雜度 \(\Theta((n + m) \log n)\)
喜提最優解。
CF1479E School Clubs
設勢能函數 \(\phi(A) = \sum\limits_{i = 1}^n f(a_i)\)
設 \(s = \sum\limits_{i = 1}^n a_i\)。
單次操作勢能函數的期望變化量必然是 \(-1\):
對於 \(x = 0\),那么已經滿足;對於 \(x \neq 0 :\)
為了方便,讓 \(f(1) = -2\)。並且為了讓最終狀態下勢能函數是一定的,我們令 \(f(0) = 0\)。於是這個東西就可以遞推。
注意一個細節:我們用分數表示函數,可以避免每次都求一次逆元。