为什么这道题二分的int mid要写在while循环外面,写里面二分就挂了:
int mid写外面的:
ll l=1, r=1e18, mid;
while(l < r)
{
mid=(l + r)/2;
int tot = work(mid);
if(tot > k) l = mid + 1;
else r = mid;
}
ans=l;
l=1, r=1e18;
while(l < r)
{
mid=(l + r)/2;
int tot = work(mid);
if(tot >= k) l=mid+1;
else r=mid;
}
int mid写里面的:
ll l=1, r=1e18;
while(l < r)
{
int mid=(l + r)/2;
int tot = work(mid);
if(tot > k) l = mid + 1;
else r = mid;
}
ans=l;
l=1, r=1e18;
while(l < r)
{
int mid=(l + r)/2;
int tot = work(mid);
if(tot >= k) l=mid+1;
else r=mid;
}
这个就挂了