#54752: 二分法讚讚 (C++)


xutingyao0505@gmail.com (TingYao Xu)


#include <iostream>
using namespace std;

long long calculate_days (long long S, long long X) {
    // 等差求和:(首項 + 末項) * 項數 / 2
    // 項數是 (X - S + 1)
    return (S + X) * (X - S + 1) / 2;
}

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);

    long long S, D;
    while (cin >> S >> D) {
        long long low = S;
        long long high = 2000000000; // 2*10^9 確保涵蓋 D=10^15 的情況
        long long ans = S;

        while (low <= high) {
            long long mid = low + (high - low) / 2;

            if (calculate_days(S, mid) >= D) {
                ans = mid;
                high = mid-1;
            } else {
                low = mid + 1;
            }
        }
        cout << ans << "\n";
    }
    return 0;
}