社区讨论

使用二分只有十分

P1873[COCI 2011/2012 #5] EKO / 砍树参与者 3已保存回复 3

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
3 条
当前快照
1 份
快照标识符
@lo15kxjr
此快照首次捕获于
2023/10/22 15:34
2 年前
此快照最后确认于
2023/11/02 15:07
2 年前
查看原帖
CPP
#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 ;
		}
	}
}
求教大佬,我的二分写法具体哪里出错

回复

3 条回复,欢迎继续交流。

正在加载回复...