#include <stdio.h> #include <iostream> #include <algorithm> #include <string> #include <string.h> #include <math.h> #include <map> #include <vector> using namespace std; int N, M; long long Max; long long tree[1000010]; long long cal(long long mid) { long long sum = 0; for(int i = 1; i <= N; i++) { if(mid < tree[i]) { sum += tree[i]-mid; } } return sum; } int main(void) { // freopen("B2805_input.txt", "r", stdin); cin >> N >> M; for(int i = 1; i <= N; i++) { cin >> tree[i]; } sort(tree+1, tree+N+1); long long left = 1; long long right = tree[N]; while(left <= right) { // 절단기의 높이 long long mid = (left + right) / 2; // 자른 나무길이의 합 long long sum = cal(mid); if(sum >= M) { left = mid+1; if(mid > Max) { Max = mid; } } else { right = mid-1; } } cout << Max; return 0; } | cs |
'Baekjoon > Search' 카테고리의 다른 글
[백준 2110] 공유기 설치 (Binary Search) (C/C++) (★★★) (0) | 2020.03.31 |
---|---|
[백준 2512] 예산 (Binary Search) (C/C++) (★) (0) | 2020.03.31 |
[백준 2869] 달팽이는 올라가고 싶다 (Binary Search) (C/C++) (0) | 2020.03.31 |
[백준 1654] 랜선 자르기 (Binary Search) (C/C++) (★) (0) | 2020.01.28 |