二分
二分分為整數二分和實數二分,其中整數二分模板有兩個
模板:
整數二分模板
第一種模板將區間分為[ l , mid ] 和 [ mid + 1, r ]
1int bsearch_1(int l, intr)2
9return
l;10 }
第二種模板把區間分為[ l , mid - 1] 和 [ mid , r ],需要注意的是,這裡算mid時要用 l + r + 1 >> 1; 這裡需要加一
1int bsearch_2(int l, intr)2
9return
l;10 },
計算 mid 時 +1,是因為防止陷入死迴圈,用第二種模板會有種情況使迴圈陷入死迴圈,例如某次更新後區間變成 [x1, x2 ] ,如果我們計算 mid 時不 +1,l + r >> 1為向下取整,所以我們計算的 mid 始終是 l ,此時 l < r 恆成立如果 if () 條件成立 l = mid,至此迴圈將一直進行下去,陷入死迴圈
實數二分就簡單多了,因為我們不用考慮邊界情況,直接二分即可
1double bsearch_3(double l, doubler)2
10return
l;11 }
AcWing演算法基礎1 5
字首和與差分 兩個內容都比較少,就放一起寫了 設陣列 a 的前 n 項為a1 a2 a3 an 字首和陣列就是每一項是a陣列的前i項和,比如字首和陣列res,res 1 a 1 res 2 a 1 a 2 res n a 1 a 2 a n 字首和可以在o 1 的時間內計算一段區間內的累加和,比如區...
AcWing演算法基礎1 4
高精度 高精度加法,高精度減法,高精度乘低精度,高精度除以低精度,大概平時用的最多的就是這四個,模板有兩種 因為我現在不太會用vector,就用陣列也寫了個,23333 高精度運算和人工手算差不多,就是模擬人工手算的過程,乘法有點不一樣,在下面有提到,大致也是模擬運算 廢話不多說,上模板 高精度加法...
AcWing演算法基礎1 1
排序 快速排序 快排 寫題的時候用的不多基本都是直接sort 面試可能要手擼快排,上模板 1 void quick sort int q,int l,intr 2 12 quick sort q,l,j quick sort q,j 1 r 13 模板題 給定你乙個長度為n的整數數列。請你使用快速排...