class BinarySearch {
public:
    int getPos(vector<int> A, int n, int val) {
        // write code here
        //algorithm中有二分查找法的lower_bound可以找到第一个大于等于目标值的位置
        //upper_bound可以找到第一个大于目标值的位置
        // auto it=lower_bound(A.begin(),A.end(),val);
        // if(it!=A.end())
        //     return it-A.begin();
        // return -1;

        //自己实现二分查找
        //定义查找起始指针和末尾指针
        int left=0;int right=n-1;//查找范围[left,right]
        //每次与范围中间值比较,直到查找范围为空
        while(left<=right)
        {
            //与中间值比较
            int mid=left+(right-left)/2;//防溢出写法
            if(A[mid]<val)
                left=mid+1;
            else
                right=mid-1;
            //可以确保left左边都是小于val的,right右边都是大于等于val的
        }
        //循环结束后,left或者right+1就是第一个大于等于val的位置
        return left;
    }
};