본문 바로가기

카테고리 없음

백준 2805

#pragma warning(disable:4946)
#pragma warning(disable:6385)
#include <cstdio>
#include <algorithm>



#define size 1000001

using namespace std;

long long  N, M;
long long tree[size];

long long  cut = 0;
long long res = 0;



int main() {


	scanf("%lld", &N);

	scanf("%lld", &M);


	for (int i = 0; i < N; i++) {
		scanf("%lld", &tree[i]);
	}

	sort(tree, tree + N);


	long long start = 0; 
	long long end = tree[ N - 1];

	while (start <= end) {
		long long mid = (start + end) / 2;
		long long sum = 0;


		for (int i = 0; i < N; i++) {
			if (tree[i] - mid > 0) {
			
				sum += tree[i] - mid;
			}
		
		}
		if (sum >= M) {
			if (res<mid) {
				res = mid;
			}
			start = mid + 1;
			
		}
	
		
		else {
			end = mid - 1;
			
		}

		
	}
	printf("%lld", res);
	
}