我发现每次我做二分题目的时候,自己写的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 }