STL:二分法模板

  我发现每次我做二分题目的时候,自己写的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 + (count1 >> 1);
11         if (_array[mid] < val)
12         {
13             lb = ++mid;
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 + (count1 >> 1);
28         if (_array[mid] <= val)
29         {
30             lb = ++mid;
31             count1 -= count2 + 1;
32         }
33         else count1 = count2;
34     }
35     return &_array[lb];
36 }

 

你可能感兴趣的:(STL:二分法模板)