Simple Binary Search approach


#1

#include<bits/stdc++.h>
bool ispossible(vectora,long long int mid,int B)
{
long long int s=0;
long long int sum=0;
for(long long int i=0;i<a.size();i++)
{
if(a[i]-mid>0)
sum+=a[i]-mid;
}
if(sum>=B)
return true;
return false;
}
int Solution::solve(vector &A, int B) {
sort(A.begin(),A.end(),greater());
long long int l=0;
long long int sum=0,res=INT_MIN;
long long int r=*max_element(A.begin(),A.end());
while(l<=r)
{
long long int mid=l+(r-l)/2;
if(ispossible(A,mid,B))
{
res=max(res,mid);
l=mid+1;
}
else
r=mid-1;
}

return res%1000000007;

}