寒假以來?包括補題和 VP。
CF
1. CF1982()
C
dp + 資料結構最佳化 / 貪心。
D
轉化成解方程。裴蜀定理。
E
分治。每次簡化 1/2。
\(f(n, k) = f(m, k) + f(n - m, k - 1), m = 2^x, m < n, m(Max)\)。然後再算一算中間的數量即可。
F
維護序列 \(a_i>a_{i+1}\)。找到不滿足條件的最大區間 \([l,r]\),顯然要答案區間包含它並且使得值域連續,這裡根據最大值最小值 ds 上二分即可(因為前後都是遞增的)。
2. CF1989
B
LCS 變形。
C
二分後簡單貪心。
D
遞迴實現被 hack 了。
先一次操作使得 \(c_i\) 在 \(10^6\) 範圍內,考慮 dp。
不妨按照限制從小到大 dp,每次轉移不能暴力,由於前面所有狀態可以轉移,並且都是 +1,故 dp 陣列單調,維護 \(a-b\) 的最大值作為 \(V_{now}\) 即可。
E
有個 dp 用第 \(k+1\) 維表示大於 \(k\) 的維的總答案的 trick。
本質上我們只關心相同數構成的塊的狀態。至少出現 \(k\) 個數說明段數大於等於 \(k\)。
字首和最佳化 dp。注意特殊情況:不在開頭或者結尾的長為 \(2\) 的段。因為還原在 \(b\) 裡面是 2 個 1。會和分成 2 個 1 的段重複計算。
3. CF1983
B
-
對每個 \(2\times 2\) 的矩陣操作,易證成立。
-
結論:每行每列關於 \(3\) 同餘。
C
可以暴力確定前面和後面的分界點,判斷中間是否成立即可。
D
不妨 \(r=l+1\),發現所有 \(r>l\) 的情況都可以分解成多個 \(r=l+1\) 的操作。
考慮直接排序,一個陣列排完過後一直 1 2
跳即可。發現只要奇偶性不變就可以。
又知這樣子排序的交換次數是逆序對個數,bit 計算。
E
F
不難想到二分答案然後對滿足條件的計數。(trie 上可以實現計算小於等於一個數的資訊)
掃描 \(r\),trie 上每個節點維護最後一次到達的下標 \(lst_x\),就是所有滿足小於等於二分值的 \(lst_x\) 的最大值。(在這個點前面一定能取到最小值)
不要忘記保留歷史版本的 \(lst\) 最大值。