Binary Search 2805

C++ 코드

//2805 파라메트릭 서치
//나무 자르기 - 절단기의 높이 설정 h를 올리면 남은 길이가 줄어듬 그래서 문제는 [정해진 남은길이 이상, h의 높이구하기]
#include <bits/stdc++.h>
#define fIO ios_base::sync_with_stdio(false); \
cin.tie(NULL);
using namespace std;
int n;
long long m;
vector<int> tree;
bool is_possible(int h)
{
long long sum = 0;
for(int i = 0; i < n; i++)
{
if(tree[i] > h)
sum += (tree[i]- h);
}
return sum >= m;
}
int main(void)
{
fIO
cin >> n >> m;
tree.resize(n);
for(int i = 0; i < n; i++)
{
cin >> tree[i];
}
int left = 0, right = *max_element(tree.begin(), tree.end());
int answer = 0;
while(left <= right)
{
int mid = (left + right) / 2;
if(is_possible(mid))
{
answer = mid;
left = mid + 1;
}
else
{
right = mid - 1;
}
}
cout << answer << "\n";
}