class Solution {
public:
    int GetNumberOfK(vector<int> data ,int k) {
        if(data.size()==0) return 0;
        int l = sear_le(data,k);//左边找<k的位置时,data[l]可能回>=k
        int r = sear_r(data,k);//右边找k边界时,data[r]可能<=k;
        //如何含有k,则必找到k,前提是有序,否则l>r
        if(l>r)return 0;
        else return r-l+1;
    }
    int sear_le(vector<int> data,int k)
    {
        int le  = 0;
        int r = data.size()-1;
        while(le<=r)
        {
            int  mid  =le+r>>1;//统一向下取整
            if(data[mid]<k)//<k,若有k,则data[le]的取值必定等于k
              //				若没有k,则data[le]的取值必定大于k
            {
                le = mid+1;
            }else{
                r = mid-1;
            }
        }
        return le;
    }
     
    int sear_r(vector<int> data,int k)
    {
        int le  = 0;
        int r = data.size()-1;
        while(le<=r)
        {
            int  mid  =le+r>>1;
            if(data[mid]<=k)
            //if <=k 时,else条件为data[r]>k,若有k,即r的结果为data[r]=k
            //  							若没有k,data[r]<k
            {
                le = mid+1;
            }else{
                r = mid-1;
            }
        }
        return r;
    }
};