蒟蒻的问题
查看原帖
蒟蒻的问题
206423
焚魂楼主2021/7/1 20:13

为什么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;
}
2021/7/1 20:13
加载中...