我发现每次我做二分题目的时候,自己写的upper_bound和lower_bound老是会出错。
而且对于普通的整数二分的时候lb和rb不好控制
虽然有时候可以直接用模板的STL,但是感觉对于某些问题还是不是很方便(主要是对于模板struct不是很支持)
我直接模仿stl写了两个自己用的模板,以后就用这俩就好了,不用烦了
1 typedef int Type; 2 static int _array[]; 3 4 Type *Binary_Lower_Bound(int &sum_comb, Type val) 5 { 6 int lb = 0, mid, count1 = sum_comb, count2; 7 while (count1 > 0) 8 { 9 count2 = count1 >> 1;10 mid = lb + count2;11 if (_array[mid] < val)12 {13 lb = mid + 1;14 count1 -= count2 + 1;15 }16 else count1 = count2;17 }18 return &_array[lb];19 }20 21 Type *Binary_Upper_Bound(int &sum_comb, Type val)22 {23 int lb = 0, mid, count1 = sum_comb, count2;24 while (count1 > 0)25 {26 count2 = count1 >> 1;27 mid = lb + count2;28 if (_array[mid] <= val)29 {30 lb = mid + 1;31 count1 -= count2 + 1;32 }33 else count1 = count2;34 }35 return &_array[lb];36 }