题目就是二分,死活过不了这题。我看不出这代码哪里错了。
int N,M;
int a[1000005];
void find(int low,int high){
if(low>high) return;
int mid=(low+high)/2;
ll sum=0;
for(int i=0;i<N;++i){
if(a[i]>mid) sum+=(a[i]-mid);
if(sum>M) break;
}
if(sum==M) {
printf("%d",mid);
return;
}
else if(sum>M) find(mid,high);
else find(low,mid);
return;
}
int main(){
//关闭同步,解除绑定
//std::ios::sync_with_stdio(false);
//std::cin.tie(0);
int high=-1;
scanf("%d %d",&N,&M);
for(int i=0;i<N;i++){
scanf("%d",&a[i]);
if(a[i]>high) high=a[i];
}
find(0,high+1);
return 0;
}