https://www.acmicpc.net/problem/2805
떡볶이 떡 만들기와 유사하다.
코드는 다음과 같다.
#include <iostream>
#include <algorithm>
#define MAX_CNT 1000000
#define MAX_LENGTH 10000000000
typedef long long ll;
using namespace std;
int n,m;
int heights[MAX_CNT];
ll s=0;
ll e=MAX_LENGTH;
ll ans=0;
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin >> n >> m;
for(int i=0;i<n;i++){
cin >> heights[i];
}
while(s<=e){
ll mid=(s+e)/2;
ll result=0;
for(int i=0;i<n;i++){
if(heights[i]>mid) result+=heights[i]-mid;
}
if(result<m){
e=mid-1;
}
else{
ans=max(mid,ans);
s=mid+1;
}
}
cout << ans;
}