#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int MaxN=1e6+10;
int a[MaxN];
int n,m;
long long cut_num(int mid)
{
long long res=0;
for(int i=1;i<=n;i++)
{
if(a[i]>mid)
res+=a[i]-mid;
}
return res;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
int bottom=0;
int top=a[n];
while(bottom<top)
{
int mid=(bottom+top)/2;
long long num= cut_num(mid);
if(num>m)
{
bottom=mid+1;
}
else if(num<m)
{
top=mid-1;
}
else
{
bottom=mid;
top=mid;
}
}
cout<<bottom;
return 0;
}
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int MaxN=1e6+10;
int a[MaxN];
int n,m;
long long cut_num(int mid)
{
long long res=0;
for(int i=1;i<=n;i++)
{
if(a[i]>mid)
res+=a[i]-mid;
}
return res;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
sort(a+1,a+1+n);
int bottom=0;
int top=a[n];
while(bottom<=top)
{
int mid=(bottom+top)/2;
long long num= cut_num(mid);
if(num>=m)
{
bottom=mid+1;
}
else if(num<m)
{
top=mid-1;
}
}
cout<<top;
return 0;
}
没感觉有啥区别阿