为什么while里面mid=(l+r+1)/2一定要+1不然程序就会卡死?
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long l,r,mid,all;
long long n,m,maxx=-1,minn=99999999999999;
long long lh[10000010];
int main() {
scanf("%d%d",&n,&m);
for(long long i = 1;i <= n;i++) {
cin >> lh[i];
maxx = max(maxx,lh[i]);
minn = min(minn,lh[i]);
}
long long l = minn,r = maxx;
while(l < r) {
mid = (l+r+1)>>1;
all = 0;
for(long long i = 1;i <= n;i++) {
if(lh[i]-mid > 0)
all += lh[i]-mid;
}
if(all < m) {
r = mid-1;
}
else if(all >= m) {
l = mid;
}
}
cout << l;
return 0;
}