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<

你可能感兴趣的:(蓝桥杯,c++,蓝桥杯,算法)