10分求调二分法
查看原帖
10分求调二分法
1269676
kjkads楼主2024/1/24 16:07
#include<bits/stdc++.h>
using namespace std;
long long const maxN=1e6+10;
long long arr[maxN]; 
long long f(int mid,int N)
{
	long long result=0;
	for(int i=0;i<N;i++)
	{
		if(arr[i]>mid)
		{
			result+=arr[i]-mid;
		}
	}
	return result;
	
}
int main(void)
{
	long long N,M,num,left,right,mid,temp;
	cin>>N>>M;
	for(int i=0;i<N;i++)
	{
		cin>>arr[i];
		right=max(M,arr[i]);
	}
	left=1;
	while(left<=right)
	{
		mid=(left+right)/2;
		temp=f(mid,N);
		if(M==temp)
		{
			cout<<mid;
			break;
		}
		else if(M<temp)
		{
			left=mid+1;
		}
		else
		{
			right=mid-1;
		}
	}
	return 0;
}
2024/1/24 16:07
加载中...