用二分写的答案,临界点怎么调都是错的,求改。
#include <bits/stdc++.h>
using namespace std;
map <long long,int> mp;
int l,r,n,a[1000005],big=0;
long long m;
long long get(int x)
{
long long num=0;
for (int u=1;u<=n;u++)
num+=max(a[u]-x,0);
return num;
}
int main()
{
cin>>n>>m;
for (int u=1;u<=n;u++)
{
cin>>a[u];
big=max(big,a[u]);
}
l=0;
r=big;
int mid;
while (l<r)
{
mid=(l+r)/2;
int g=get(mid);
if (g>=m)
l=mid+1;
else
r=mid;
}
cout<<mid;
return 0;
}