套了2个二分,三个测试点没过,大佬帮看下
#include<bits/stdc++.h>
using namespace std;
typedef long long op;
op h[1000000];
op s,g,d,mid,mid2,c;
int check(op t,op l,op r){
d=0;
while(l<r){
mid=l+(r-l)/2;
if(h[mid]>t){
r=mid;
}else{
l=mid+1;
}
}
for(op i=r;i<s;i++){
d+=h[i]-t;
}
return d;
}
int erfe(op t,op l,op r){
while(l<r){
mid2=l+(r-l)/2;
if(check(mid2,0,s-1)<t){
r=mid2;
}else{
l=mid2+1;
}
}
return r;
}
int main(){
cin >> s >> g;
for(op i=0;i<s;i++){
cin >> h[i];
}
sort(h,h+s);
c=erfe(g,0,h[s-1]);
cout << c-1;
}