백준 2805 c++

magicdrill·2024년 3월 15일
0

백준 문제풀이

목록 보기
154/655

백준 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;
}

0개의 댓글