백준 2805 c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
long long N, M, low, high;
vector <long long> tree;
void input_tree()
{
int i, temp;
for (i = 0; i < N; i++)
{
cin >> temp;
tree.push_back(temp);
}
return;
}
int find_max()
{
int i;
long long result = 0;
long long sum;
long long mid;
while (low <= high)
{
sum = 0;
mid = (low + high) / 2;
for (i = 0; i < N; i++)
{
if (tree[i] - mid > 0)
{
sum += tree[i] - mid;
}
else
{
;
}
}
if (sum >= M)
{
result = mid;
low = mid + 1;
}
else
{
high = mid - 1;
}
}
return result;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> N >> M;
input_tree();
sort(tree.begin(), tree.end());
low = 0;
high = tree.back();
cout << find_max() << "\n";
return 0;
}