【題解】CF1609 Deltix Round, Autumn 2021 (Div. 1 + Div. 2)
三棵線段樹。
A
將每個數表示成 \(2^k\times c\),其中 \(c\) 是奇數,顯然最後一頂找到一個最大的 \(c\) 將所有的 \(2^k\) 都乘過去即可。
程式碼:Submission #137565948 - Codeforces
B
一次操作最多消除一個 abc
也一定消除一個 abc
,維護 abc
出現次數即可。
程式碼:Submission #137566109 - Codeforces
C
考慮一個點往後跳,僅跳 \(1\) 和質數跳到的第一個質數所處的位置,然後再看這個位置往後跳能跳多少個 \(1\) 就行。這兩個東西倒著推很好求。
程式碼:Submission #137567001 - Codeforces
D
一個連通塊可以連成一個菊花,合併兩個連通塊需要一條額外邊。記錄額外邊的個數,並且維護連通塊大小,每次選最大的若干個連通塊合併即可。
程式碼:Submission #137567369 - Codeforces
E
考慮 dp:令 \(f_{i,0/1/2}\) 表示到 \(i\) 接了長度為 \(0/1/2\) 的子序列最小花費代價。轉移顯然,用線段樹維護即可。
程式碼:Submission #137568052 - Codeforces
F
考慮建立小根笛卡爾樹和大根笛卡爾樹。當左端點取到 \(l\) 時,很容易求得如果此時要求答案區間最小值為 \(x\) 的話,右端點應當取到的區間。最大值同理。
將所有數按照 \(\mathrm{popcount}\)
程式碼:Submission #137566518 - Codeforces
G
注意到最終序列長度為 \(n+m-1\) 。將兩個序列差分,除了 \(a_1,b_1\) 必須在開頭外,剩下的一定是從小到大排序更優。因為題目保證 \(a,b\) 差分後除去開頭滿足單調不減,所以用線段樹維護 \(b\),每次詢問考慮插入 \(a\)
程式碼:Submission #137569481 - Codeforces
H
不會。