返回题解分享
讨论 / 题解分享/ 帖子详情

砍树 - 题解

#include <iostream>
using namespace std;

int a[1000010];

int main() {
    cin.tie(0);
    cout.tie(0);

    long long n, m, max = -1, u = 0, x = 0;

    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        if (max < a[i]) {
            max = a[i];
        }
    }

    long long l = 0, r = max;

    while (l <= r) {
        u = 0;
        int mid = (l + r) / 2;

        for (int i = 1; i <= n; i++) {
            if (a[i] > mid) {
                u += a[i] - mid;
            }
        }

        if (u >= m) {
            x = mid;
            l = mid + 1;
        } else {
            r = mid - 1;
        }
    }

    cout << x;
    return 0;
}
0 回复 0 转发 0 喜欢 2 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!