这道题同样是可以分析出来二段性的
上手代码
#include <iostream>
using namespace std;
const int N = 1e6+10;
typedef long long ll;
int a[N];
int n,m;
ll calc(int x)
{
ll cnt = 0;
for(int i = 1;i<=n;i++)
{
if(x<a[i]) cnt+=a[i]-x;
}
return cnt;
}
int main()
{
cin >> n >> m;
for(int i = 1;i<=n;i++)
{
cin >> a[i];
}
ll l = 0,r = 4e5;
while(l<r)
{
ll mid = (l+r+1)/2;
if(calc(mid) >= m) l=mid;
else r=mid-1;
}
cout << l << endl;
return 0;
}