二分查找与二分答案

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 }

 

posted @ 2021-12-04 20:52  Hell0er  阅读(34)  评论(0编辑  收藏  举报