标签:bit color 数值 二分查找 最大 while using 最大数 namespace
二分初学者一定要认真熟练将以下模版练习并将逻辑理解清楚
1 #include<bits/stdc++.h> 2 using namespace std; 3 int a[10]={1,3,5,7,9,9,9,11,13,15}; 4 //二分查找1 返回>=p的第一数下标,相当于jlower_bound() 5 int bs1(int p){ 6 int l=0, r=10-1; 7 int ans=-1; 8 while(l<=r){ 9 int mid=(l+r)/2; 10 if(a[mid]>=p){ 11 ans=mid; 12 r=mid-1; 13 } 14 else 15 l=mid+1; 16 } 17 return ans;//返回值为-1表示数列中所有数都<P 18 } 19 //二分查找2 返回>p的第一数下标,相当于upper_bound() 20 int bs2(int p){ 21 int l=0, r=10-1; 22 int ans=-1; 23 while(l<=r){ 24 int mid=(l+r)/2; 25 if(a[mid]>p){ 26 ans=mid; 27 r=mid-1; 28 } 29 else 30 l=mid+1; 31 } 32 return ans;//返回值为-1表示数列中所有数都<P 33 } 34 //二分查找3 返回<p的最大数值下标 35 int bs3(int p){ 36 int l=0, r=10-1; 37 int ans=-1; 38 while(l<=r){ 39 int mid=(l+r)/2; 40 if(a[mid]<p){ 41 ans=mid; 42 l=mid+1; 43 } 44 else 45 r=mid-1; 46 } 47 return ans;//返回值为-1表示数列中所有数都>P 48 } 49 //二分查找4 返回<=p的最大数值下标 50 int bs4(int p){ 51 int l=0, r=10-1; 52 int ans=-1; 53 while(l<=r){ 54 int mid=(l+r)/2; 55 if(a[mid]<=p){ 56 ans=mid; 57 l=mid+1; 58 } 59 else 60 r=mid-1; 61 } 62 return ans;//返回值为-1表示数列中所有数都>P 63 } 64 int main() 65 { 66 67 while(1){//供测试函数使用 68 int x; 69 cin>>x; 70 cout<<bs4(x)<<endl; 71 } 72 73 return 0; 74 }
标签:bit color 数值 二分查找 最大 while using 最大数 namespace
原文地址:https://www.cnblogs.com/tflsnoi/p/13206085.html