二分答案有一個很顯著的特徵:一定存在一個臨界值,單調性只是臨界值的一種,而不是全部。
臨界值,就是尋找第一個/最後一個滿足要求的值,這又分別對應著兩個完全不同的二分模板,這裡做題時推薦使用“第一個滿足要求的值”,即對應著 STL 中的 upper_bound ,手寫板對應著 這篇文章 裡講的模板。
標誌詞
一些標誌性詞語:
- 最大值
- 最小值
- 最大化最小值
- 最小化最大值
- 第一個...
- 最後一個 ...
進階技巧
一些進階技巧:
- 對於在某區間記憶體在臨界值或有單調性,但放在全域性看就不滿足的話,可以把全域性分割成幾個小區間,對每個小區間進行二分。如 [ CSP-J 2022 ] 解密 中把一個二次函式以頂點為分界,在左右端分別進行查詢;[ NOIp 2001 提高組 ] 一元三次方程 因為根與根之間的差大於等於 \(1\) ,所以可以每隔 \(1\) 為一個分界點,對於每個區間 \(1\) 分別進行二分即可。
常見套路
一些常見套路:
- 二分+貪心的使用,先二分出當前答案,然後進行貪心看是否合法。例如 小鳥的裝置、數列分段 II 、進擊的奶牛 。
- 二分求中位數,原理是大於等於 \(mid\) 的數的個數和大=小於 \(mid\) 的數的個數的關係進行二分,例如 最大戰力 (題解) 。
- 二分+判斷答案可行性,“判斷答案可行性” 裡可以很多演算法搭配使用。例如 汽車拉力比賽、營救。