#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
long long tree[1000005],n,m,l=1,r=-1,mid,ans;;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>tree[i];
r = max(tree[i],r);
}
while(l<=r){
ans = 0;
mid = (l+r)/2;
for(int i=1;i<=n;i++){
if(tree[i]>mid) ans+=tree[i]-mid;
}
if(ans<m) r = mid-1;
else l = mid+1;
}
cout<<l-1;
return 0;
}
这是我对了的代码,但是为什么22行不是mid呢?
还有能否将输出放进循环里来减少时间呢?
求大神解惑。