二分查找与二分答案
1.
头文件<algorithm>
lower_bound(first,last,val) //在[first,last)区域内查找不小于 val 的第一个元素的地址
upper_bound(first,last,val) //在[first,last)区域内查找大于 val 的第一个元素的地址
2.
1 #include <iostream> 2 3 using namespace std; 4 5 int a[10]={0,1,2,3,3,3,4,5,5,6}; //共10个数,用于test 6 7 int func1(int x) //寻找第一个 大于等于>=x 的下标 8 { 9 int l=1,r=9; 10 int mid; 11 while (l<r) 12 { 13 mid=(l+r)/2; 14 if (a[mid]>=x) r=mid; 15 else l=mid+1; 16 } 17 return l; 18 } 19 20 int func2(int x) //寻找第一个 大于>x 的下标 21 { 22 int l=1,r=9; 23 int mid; 24 while (l<r) 25 { 26 mid=(l+r)/2; 27 if (a[mid]>x) r=mid; 28 else l=mid+1; 29 } 30 return l; 31 } 32 33 int func3(int x) //寻找第一个 小于等于<=x 的下标 34 { 35 int l=1,r=9; 36 int mid; 37 while (l<r) 38 { 39 mid=(l+r+1)/2; 40 if (a[mid]<=x) l=mid; 41 else r=mid-1; 42 } 43 return l; 44 } 45 46 int func4(int x) //寻找第一个 小于<x 的下标 47 { 48 int l=1,r=9; 49 int mid; 50 while (l<r) 51 { 52 mid=(l+r+1)/2; 53 if (a[mid]<x) l=mid; 54 else r=mid-1; 55 } 56 return l; 57 } 58 59 int main() 60 { 61 int x; 62 cin>>x; 63 //cout<<func4(x)<<endl; 64 return 0; 65 }