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;
}