37 条题解

  • 0
    @ 2025-7-25 14:46:39
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int MAX_N = 1000000;
    long long tree[MAX_N];
    
    int main() {
        int N;
        long long M;
        cin >> N >> M;
        
        long long max_height = 0;
        for (int i = 0; i < N; i++) {
            cin >> tree[i];
            if (tree[i] > max_height) {
                max_height = tree[i];
            }
        }
        
        long long left = 0;
        long long right = max_height;
        long long result = 0;
        
        while (left <= right) {
            long long mid = (left + right) / 2;
            long long total = 0;
            
            for (int i = 0; i < N; i++) {
                if (tree[i] > mid) {
                    total += tree[i] - mid;
                }
            }
            
            if (total >= M) {
                result = mid;
                left = mid + 1;
            } else {
                right = mid - 1;
            }
        }
        
        cout << result << endl;
        
        return 0;
    }
    
    

    信息

    ID
    1
    时间
    1000ms
    内存
    128MiB
    难度
    1
    标签
    递交数
    4607
    已通过
    1304
    上传者