rt,老师也没找出问题
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,ans;
int tree[1000010];
int l=0,r,mid;
inline int read() {
register int x=0;
int f=1;
register char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return f*x;
}
inline void write(int x) {
if(x<0) {
putchar('-');
x=-x;
}
if(x>9)write(x/10);
putchar(x%10+'0');
}
inline bool check(int mid){
int sum=0;
for(int i=0;i<n;i++)if(tree[i]-mid>=0)sum+=tree[i]-mid;
return sum>=m?1:0;
}
signed main(){
n=read();
m=read();
for(int i=0;i<n;i++){
tree[i]=read();
r=r<tree[i]?tree[i]:r;
}
while(l<=r){
mid=(l+r)/2;
if(check(mid)){
ans=mid;
l=mid+1;
}else r=mid-1;
}
write(ans);
return 0;
}