我的二分是这么写的:
int l=1,r=1e18,ans1=-1;
while(l<=r){
int mid=(l+r)>>1;
int chk=check1(mid);
if(chk<=m){
if(chk==m) ans1=mid;
r=mid-1;
}
else{
l=mid+1;
}
}
if(ans1==-1){
cout<<-1;
return 0;
}
l=1,r=1e18;
int ans2=-1;
while(l<=r){
int mid=(l+r)>>1;
int chk=check1(mid);
if(chk>=m){
if(chk==m) ans2=mid;
l=mid+1;
}
else{
r=mid-1;
}
}
然后这里为什么要这样特判?
if(chk==m) ans1=mid;
if(chk==m) ans2=mid;
此外,r要开到1e14