蓝桥杯|ACwing789. 数的范围 (二分法典型例题)

本来想先用二分法求出左端点,再计算x的个数,右端点就是左端点+x的个数,但是会超时,所以还是需要二分法求左右两个端点

  1. 求左端点: 找出第一个>=x的数的位置,如果满足,则移动右端点到mid;否则移动左端点到mid+1处
  2. 求右端点:找出第一个<=x的数的位置,如果满足,则移动左端点到mid;否则移动左端点到mid-1处,此处的mid求值是(l+r+1)* 2
#include using namespace std; const int N = 100010; int q[N]; int main(){ int n,t,l,x,r,i; scanf("%d %d",&n,&t); for(i=0; i>1; if(q[mid]>=x) r=mid; else l=mid+1; } if(q[l]==x){ cout<>1; if(q[mid]<=x) l=mid; else r=mid-1; } cout<

【蓝桥杯|ACwing789. 数的范围 (二分法典型例题)】

    推荐阅读