P5749 [IOI 2019] 排列鞋子
考慮最樸素的貪心,從某一側的鞋子開始,不停向左交換當前鞋子直至匹配成功,成功後在元素組中刪去這兩個鞋子,因為交換相鄰兩數的操作不會影響元素的相對位置。
於是我們得到了一個 \(O(n^2)\) 的做法。注意到特殊性質中的鞋子大小均相等,想到對於相同大小的鞋子開 vector 記錄他們在原數組中的位置,每次在 vector 中快速查找,這一步 \(O(n)\),得到要匹配的兩個鞋子的位置之後需要快速算出中間的鞋子有多少個沒被刪掉(即實際要交換的數量),這裏用樹狀數組即可,\(O(log n)\),總複雜度即為 \(O(n log n)\)。
P6619 [省選聯考 2020 A/B 卷] 冰火戰士
將冰、火戰士分別排序後即求前(冰)、後(火)綴和,儘可能使得其相近,按温度為值域後前後綴分別為上升和下降的直線,我們則要找到最靠近交點的位置。
所以將詢問離線下來,離散化温度,每次詢問用一個指針尋找這個交點,加上快讀跑飛快。
P4551 最長異或路徑
\(\text{01Trie}\)
枚舉現在走到哪一個節點,對於該路徑異或和的每一位,如果 Trie 樹上存在與其相反的數,則走那條路徑,並累積 \(sum\),最後取 \(max\)
01Trie 切忌空間開大 \(O(n log V)\)
P6623 [省選聯考 2020 A 卷] 樹
CF1400E Clear the Multiset & P2101 命運石之門的選擇
雙倍經驗好吃。
十分經典的貪心分治 trick。
要麼全部豎着刷,要麼橫着刷到頂再處理剩餘的小塊。直接分治處理即可。
P4254 [JSOI2008] Blue Mary 開公司
李超線段樹模板,大致將數軸拍到線段樹上,對於更改操作分4種情況討論即可,注意存線段編號等細節。