Editorial - WCE0003

#include<bits/stdc++.h>

using namespace std;

#define ll long long
#define mod 1000000007
#define f first
#define s second
#define pb push_back

bool canPlace(ll arr[],ll n,ll m ,ll mid)
{
ll totalCut = 0;
for(ll i=0;i<n;i++)
{
if(arr[i]>=mid)
{
totalCut += arr[i]-mid;
}
}
return (totalCut>=m);
}

ll maxHeight(ll arr[],ll n,ll m)
{
ll left = 0;
ll right = INT_MIN;
ll finalAns = left;
for(ll i=0;i<n;i++)
right = max(right,arr[i]);
while(right>= left)
{
ll mid = left + (right-left)/2;
if(canPlace(arr,n,m,mid))
{
finalAns = mid;
left = mid + 1;
}
else
right = mid -1;
}
return finalAns;
}

int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
ll tc;
cin>>tc;
while(tc–)
{
ll n,m;
cin>>n>>m;
ll arr[n];
for(ll i=0;i<n;i++)
cin>>arr[i];
cout<<maxHeight(arr,n,m)<<"\n";
}
return 0;
}