先上模板(这是一个二分查找数的范围的模板)

        int l = 0, r = n - 1;
        while (l < r)
        {
            int mid = l + r >> 1;
            if (q[mid] >= x) r = mid;
            else l = mid + 1;
        }
    if (q[l] != x) cout << "-1 -1" << endl;
    else
    {
        cout << l << ' ';

        int l = 0, r = n - 1;
        while (l < r)
        {
            int mid = l + r + 1 >> 1;
            if (q[mid] <= x) l = mid;
            else r = mid - 1;
        }
        cout << l << endl;
    }

第一个模板是从左边查找第一个大于x的数 第二个是从右边查找第一个小于x的数
因为刚刚学会二分 一开始看到这题还有点懵 说好的二分的怎么是暴力枚举 然后借鉴了一下 别人的代码
哦~ 秒懂 原来只要二分常数(-C)做优化就行了呀
那么直接用 上面那个模板就行了
c=axx+b*x;

一秒钟就想起来了 就过来补了
yxc曾说过单调一定可以用二分 二分不是只解决单调
所以 我们在处理之前还是需要 sort()一下

bool find(int c)
{
        int l = 0, r = n - 1;
        while (l < r)
        {
            int mid = l + r >> 1;
            if (q[mid] >= x) r = mid;
            else l = mid + 1;
        }
        if(q[i]==c)
        return true;
        else
        return false;
}