使用二分只有十分
查看原帖
使用二分只有十分
735881
pjpdsk楼主2023/10/6 22:53
#include<bits/stdc++.h>

using namespace std ;

const int N=1000005 ;
const long long M=2*1e9+5;
int n ;
long long m ;
int tree[N] ;
int l,r ;


int main()
{
	scanf("%d%lld",&n,&m) ;
	
	for (int i=1 ;i<=n ;++i) scanf("%d",&tree[i]) ;
	sort(tree+1,tree+1+n) ;
	l=tree[1];r=tree[n];
	while(r>=l)
	{
		int mid = (l+r) >> 1 ;
		long long ans = 0;
		for(int i=n ;i>=1 ;--i)
		{
			if (tree[i] <= mid) break ;
			ans += tree[i]-mid ;
		}
		
		if (ans == m) 
		{
			cout << mid ;
			break ;
		} else if (ans > m)
		{
			l = mid+1 ;
		} else if (ans < m)
		{
			r = mid-1 ;
		}
	}
}

求教大佬,我的二分写法具体哪里出错

2023/10/6 22:53
加载中...