y总二分查找算法模板
int bsearch_1(int l, int r)
{
while (l < r)
{
int mid = l + r >> 1;
//性质在右边,区间划分成[l, mid]和[mid + 1, r]
if (check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
int bsearch_2(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1;
//性质在左边,区间划分成[l, mid - 1]和[mid, r]
if (check(mid)) l = mid;
else r = mid - 1;
}
return l;
}
数的范围
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int a[N];
int main(void){
int n,q;cin>>n>>q;
for(int i=1;i<=n;i++)cin>>a[i];
while(q--){
int x;cin>>x;
//注:l是左边界下标,r是右边界下标
int l=1,r=n;
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<<r-1<<" ";
l=1,r=n;
while(l<r){
int mid=l+r+1>>1;
if(a[mid]<=x)l=mid;
else r=mid-1;
}
cout<<l-1<<endl;
}
}
return 0;
}