Educational Codeforces Round 126 (Rated for Div. 2)
阿新 • • 發佈:2022-04-10
A. Array Balancing
如果\(a_i > b_i\),那麼就對換,反之不對換。
B. Getting Zero
一開始寫遞迴發現死迴圈了,改成寫BFS就能過。
C. Water the Trees
最後的狀態會是所有元素都等於初始狀態所有元素中的最大值。
然後二分。
D. Progressions Covering
從後往前刪,每次讓最後一個\(a_i < b_i\)的位置的\(a_i\)加\(k\),這樣會是最優的。
然後就是怎麼維護的問題了,假設當前位於\(i\),之前在位置\(j >= i\)操作了\(p_j\)次,\([i, i + k - 1]\)
位置\(i\)操作完了就移動到位置\(i - 1\),對於位置\(i - 1\),\([i, i + k - 1]\)所有操作的影響都減了\(1\),所以\(delta = delta - count\),然後\(p_{i + k -1}\)不再有影響,所以\(count = count - p_{i + k - 1}\)。重複上一個操作。
注意對於\(1 \le i \le k\)
E. Narrow Components
線段樹經典題型,比賽的時候想出來了,但是手殘半個小時沒調出來,主要是合併區間的操作沒寫好。
其實就是線段樹維護,每次合併左右兩個區間的時候,左區間的右邊界和右區間的左邊界可能會連通,從而減少連通塊的數量,所以左右區間合併的時候,先把兩個區間的答案加起來,再討論減少的情況。
有一個方法可以比較好的維護:對原本矩陣中的方格進行編號,然後對於每個區間維護3個值:區間答案\(ans\),3個左邊界編號\(lmask\),3個右邊界編號\(rmask\)。然後合併的時候就是並查集加邊,如果\(lmask_i\)
F. Teleporters
TBA。