题单:【算法1-6】二分查找与二分答案 - 题单 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

1.STL函数

upper_bound(arr,arr+n,arr[i]+c);//arr是数组,n是数组中元素个数,如果从1开始那么可以写成(arr+1,arr+1+n,arr[i]+c)

lower_bound(arr,arr+n,arr[i]+c);//同上(可以查找大于等于arr[i]+c的第一个数所在的位置,并返回数组下标)

用法原理参考:C++ STL lower_bound()和upper_bound() - Tuple - 博客园 (cnblogs.com)

2.手打二分

原理参考:二分查找(折半查找)算法详解(C语言实现) (biancheng.net)

1 int find(int x) //二分查找 
2 {
3     int l=1,r=n;
4     while (l<r)
5     {
6         int mid=l+(r-l)/2;
7         if (a[mid]>=x) r=mid;
8         else l=mid+1;
9     }

挺水的emmm