P1873 [COCI 2011/2012 #5] EKO / 砍树——二分
二分
P1873
思路
二分找到满足获得木材大于M的最大锯片高度
代码
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 10;
int n, m;
int a[N];
bool check(int mid)
{
long long int cnt = 0;
for (int i = 0; i < n; i ++ )
{
if (a[i] > mid) cnt += a[i] - mid;
}
if (cnt >= m) return true;
return false;
}
int SR(int l, int r)
{
while (l < r)
{
int mid = l + r + 1 >> 1;
if (check(mid)) l = mid;
else r = mid - 1;
}
return r;
}
int main()
{
scanf("%d %d", &n, &m);
for (int i = 0; i < n; i ++ )
{
scanf("%d", &a[i]);
}
printf("%d\n", SR(0, 400000));
return 0;
}

浙公网安备 33010602011771号