为什么只能过一个点啊
查看原帖
为什么只能过一个点啊
279699
Ivan1367楼主2021/5/8 20:50
#include <bits/stdc++.h>

using namespace std;

typedef long long LL;
typedef pair<int, int> PII;

const int N = 1000010;
LL q[N];
int n;
LL m;

bool check(LL mid)
{
	LL res = 0;
	for (int i = 1; i <= n; i ++ )
	{
		if (q[i] <= mid) continue;
		else res += q[i] - mid;
	}
	if (res <= m)// mid >= res
		return true;
	return false;
}	

void solve()
{
	
	scanf("%d%lld", &n, &m);
	LL maxn = 0;
	for (int i = 1; i <= n; i ++ ) 
	{
		scanf("%lld", &q[i]);
		//maxn = max(q[i], maxn);
	}
	sort(q + 1, q + 1 + n);
	
	LL l = q[1], r = q[n];
	while (l < r)
	{
		LL mid = (l + r) / 2;
		if (check(mid)) r = mid;
		else l = mid + 1; 
	}
	
	cout << r << endl;
}

int main()
{
	int T;
//	cin >> T;
	T = 1;
	while(T -- )
	{
		solve();
	}
	return 0;
}

2021/5/8 20:50
加载中...