//整数二分
while (l < r)
{
int mid = l + r >> 1;
if (q[mid] >= x) r = mid;//中间点变为右边界
else l = mid + 1;
}
while (l < r)
{
int mid = l + r + 1 >> 1;
if (q[mid] <= x) l = mid;//中间点变为左边界
else r = mid - 1;
}
//浮点数二分将判定条件中改为r - l > 1e-8