10 分二分答案 QAQ
查看原帖
10 分二分答案 QAQ
842408
pangyuchen75楼主2024/1/23 18:30

想看提交结果就戳这里

代码如下:

#include <cstdio>
#define N 1000005
using namespace std;

int n, m;
int h[N];
int l, r;
int mid;

bool check(int x) {
	int tmp = 0;
	
	for(int i = 1; i <= n; ++i)
		if(h[i] > x)
			tmp += h[i] - x;
	
	return tmp > m;
}

int main() {
	scanf("%d%d", &n, &m);
	
	for(int i = 1; i <= n; ++i) {
		scanf("%d", &h[i]);
		if(h[i] > r)
			r = h[i];
	}
	
	while(l <= r) {
		mid = (l + r) >> 1;
		
		if(check(mid))
			l = mid + 1;
		else
			r = mid - 1;
	}
	
	printf("%d\n", l);
	
	return 0;
}
2024/1/23 18:30
加载中...