我用二分只能对部分样例,请教大佬这题应该怎么做
#include<bits/stdc++.h>
#include<algorithm>
const int MAX=1e6+3;
using namespace std;
int n,m,k,x,y,z,sum,num,ans,max_a,max_sum,min_a=1e9;
string s1,s2,str;
char cc;
bool f,flag;
int h[MAX],l[MAX],a[MAX],l1,r1,mid;
int check(int qp){
int num=0;
for(int p=1;p<=n;p++){
if(a[p]>=qp){
num+=qp;
}else break;
}
return num;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
max_a=max(max_a,a[i]);
min_a=min(min_a,a[i]);
}
sort(a+1,a+n+1,greater<int>());
max_sum=n*min_a;
int l=1,r=max_a;
while(l<=r){
int mid=(l+r)>>1,k=check(mid);
// cout<<mid<<" "<<k<<endl;
if(k<max_sum) r=mid-1;
else if(k>max_sum){
max_sum=k;
l=mid+1;
}else break;
}
cout<<max_sum;
return 0;
}