新手初入二分,代码还写得很烂,大佬轻喷
#include <bits/stdc++.h>
using namespace std;
long long a[1000001],M,maxx = 0;
int N;
int cut(long long mid){
long long total = 0;
for(int i = 1;i<=N;i++){
if(a[i]>mid) total += a[i]-mid;
}
return total;
}
int main(){
cin>>N>>M;
for(int i = 1;i<=N;i++){
cin>>a[i];
maxx = max(maxx,a[i]);
}
long long L = 1,R = maxx,mid=0;
while(L<=R){
mid = (L+R)/2;
long long total = 0;
if(cut(mid) == M) break;
else if(cut(mid) > M) L = mid+1;
else R = mid - 1;
}
cout<<mid;
return 0;
}