二分查找算法模板 - AcWing 登录后复制 #include<iostream> using namespace std; const int N=100001; int n,q; int a[N]; int main(){ cin>>n>>q; for(int i=0;i<n;i++){ cin>>a[i]; } while(q--){ int x; cin>>x; int l=0,r=n-1; //寻找左边界,即第一个大于等于x的数,二分的是绿色的点 while(l<r){ int mid=l+r>>1; if(a[mid]>=x)r=mid; else l=mid+1; } if(a[l]!=x)cout<<"-1 -1"<<endl; else{ cout<<l<<" "; //寻找右边界,即最后一个大于等于x的数,二分是红色的点 int l=0,r=n-1; while(l<r){ int mid=l+r+1>>1; if(a[mid]<=x)l=mid; else r=mid-1; } cout<<r<<endl; } } return 0; } 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35. 原创作者: u_16969274 转载于: https://blog.51cto.com/u_16969274/11820706