Halfway

题意是给定一个数,找出\([1, n]\)区间内和等于\((n - 1) * n / 4\)的数,因为区间内的数的和具有单调性,且数据范围只能用\(log(n)\)的算法来做,考虑二分查找
我写的二分本质上是向左找数,因为计算从1到n的和,再除以二,因为是向下取整,会有精度损失,正常二分找的数的和是要比理想中的和大,所以应该向左找

#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
    ll a;
    cin >> a;
    ll sum = (a - 1) * a / 4;
    ll l = 0, r = a;
    while (l <= r) {
        ll mid = l + (r - l) / 2;
        if ((a - mid - 1) * (a - mid) / 2 == sum)
            r = mid - 1;
        else if ((a - mid - 1) * (a - mid) / 2 > sum)
            l = mid + 1;
        else
            r = mid - 1;
    }
    cout << l << endl;
    return 0;
}
posted @ 2022-07-08 15:10  Flying_bullet  阅读(32)  评论(0)    收藏  举报