有一些題目,常常會用到二分,但無良的出題人總是會卡人們的二分。。。比方說你每次二分總要分滿log次,而且還總要分n次,這樣效率就變成了n*log(n),很是gg。但是思考發現我們的二分存在乙個小問題,就是說右端點總是被卡死的,如果解決這個瓶頸,便能實現不被卡。
而能二分說明它一定有二分性質,也就是說我們可以來次倒著的二分確定它的屆。
假設說最低是l,先試試l+1,再試試l+2^1,再試試l+2^2,再試試l+2^3……知道你找到了乙個不合法的r=l+2^k,好的,你就把它當r,l=l+2^(k-1)(因為之前確定是合法的了),來二分,和普通二分無異。這樣可以處理掉極端資料,由於你確定r的過程也是單log(n)的,所以理論複雜度沒有太大變化。
當然,要注意的是,你確定二分方案可行的check不能複雜度太高!常數是很可怕的,有時候並不一定能接受。不要每個二分都這麼打,有可能會聰明反被聰明誤。
二分常用技巧
從小到大,公升序排列 lower bound s,t,num s t 1,查詢到第乙個大於或等於num的數的位址,不存在返回t upper bound s,t,num s t 1,查詢到第乙個大於num的數的位址,不存在返回t 從大到小,降序排列 lower bound s,t,num s t 1,...
二分 小知識
stl二分查詢 lower bound 標頭檔案 include 函式模板 如 binary search 函式功能 函式lower bound 在first和last中的前閉後開區間進行二分查詢,返回大於或等於val的第乙個元素位置。如果所有元素都小於val,則返回last的位置 舉例如下 乙個陣...
二分思想小剖析
這乙個月努力沖一沖,三月份的甲級能考掉就考掉了。今天看演算法筆記看到了二分,想著二分還不簡單。看了看發現並不是?演算法筆記中有一句加粗的話是我以前在二分中從沒聽過的,大部分二分問題可以歸結為 尋找有序序列中第乙個滿足某條件的元素的位置。這句話一開始聽得不明所以,仔細一想別有洞天。比如下面的木棒切割問...