二分上界?(如果你30pts)
查看原帖
二分上界?(如果你30pts)
608410
封禁用户楼主2024/9/27 20:00

求问上界1e6为什么不行, 而要开到1e11

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn = 5 * 1e5 + 5;
int n, t;
inline int read() {
	int ret = 0, f = 1;char ch = getchar();
	while (ch < '0' || ch > '9') {
		if (ch == '-') f = -f;
		ch = getchar();
	}
	while (ch >= '0' && ch <= '9') {
		ret = ret * 10 + ch - '0';
		ch = getchar();
	}
	return ret * f;
}

int a[maxn];
bool check(int x) {
	int cnt = 0;
	for (int i = 1;i <= n;i++) {
		if (a[i] >= x) cnt += x;
		else cnt += a[i];
	}
	return cnt >= x * t;
}

int main() {
	n = read(), t = read();
	for (int i = 1;i <= n;i++) {
		a[i] = read();
	} 
	int l = 0, r = 1e11 + 5, mid, ans;//WHY IS IT FUCKING 1e11 ???
	while (l <= r) {
		int mid = (l + r) >> 1;
		if (check(mid)) l = mid + 1, ans = mid;
		else r = mid - 1;
	}
	printf("%d\n", ans);
	return 0;
} 
2024/9/27 20:00
加载中...