70分求助
查看原帖
70分求助
324807
chl090410楼主2023/1/7 14:18
#define int long long
using namespace std;
int n,m,a[5000005],ans,cnt,maxx=-1;
int check(int x){
	int sum=0;
	for(int i=1;i<=n;i++){
		if(a[i]>=x){
			sum+=(a[i]-x);
		}
	}
	if(sum>=m){
		return x;
	}else{
		return x-1;
	}
}
int count(int x){
	int sum=0;
	for(int i=1;i<=n;i++){
		if(a[i]>=x){
			sum+=(a[i]-x);
		}
	}
	return sum;
}
int ef(int l,int r,int fnl){
	if(l>=r){
		return check(l);
	}
	int mid=(l+r)/2,ans=count(mid);
	if(ans<fnl){
		ef(l,mid-1,fnl);
	}else{
		ef(mid+1,r,fnl);
	}
}
signed main(){
	scanf("%lld%lld",&n,&m);
	for(int i=1;i<=n;i++){
		scanf("%lld",&a[i]);
		maxx=max(maxx,a[i]);
	}
	cout<<ef(1,maxx,m);
	return 0;
}
2023/1/7 14:18
加载中...