数列删减,我一直二分死循环?


#include<iostream>
#include<algorithm>
using namespace std;
int a[200010],n,sum,T,k;
int f(int x){
int s=sum;
if(x==0){
return s;
}
if(n==1){
return s-x;
}
if(x>=n){
return (a[1]-x+n-1)*n;
}else{
for(int i=n;i>=n-x+1;i++){
s=s-a[i]+a[1];
}
return s;
}
}
int main(){
// ios_base::sync_with_stdio(false);
// cin.tie(NULL);
cin>>T;
while(T--){
sum=0;
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
sum+=a[i];
}
sort(a+1,a+1+n);
int l=0,r=sum-k,mid;
while(l<r){
mid=(l+r)/2;
if(f(mid)>k){
l=mid+1;
}else{
r=mid;
}
cout<<1;
}
cout<<l<<endl;
}
return 0;
}