bszmh @ 2018-08-10 17:36:52
while(left+1<right)
{
mid=(left+right)/2;
if(check(u[mid]))
right=mid;
else
left=mid;
}
cout<<right;
上面这段wa了 但下面这段ac,想不通为什么
while(left<=right)
{
mid=(left+right)/2;
if(cheak(u[mid])==true)
{
ans=u[mid];
right=mid-1;
}
else
left=mid+1;
}
cout<<ans;
by 梦游 @ 2018-08-10 17:49:46
while(left+1<right) //left+1<=right
right=mid;
//right=mid-1;
left=mid;
//left=mid+1;
by bszmh @ 2018-08-10 18:39:18
@贞白吴啸 不好意思,补充一下 ac的那个int left=1,right=n;(左闭右闭) wa的int left=0,right=n;(左开右闭)
by 梦游 @ 2018-08-10 19:23:46
好吧~ 我似乎误人子弟了~ 所以决定给你一份二分模板: bool binarysearch(long long* arr, long long start, long long end, long long aim){ while(start <= end){ long long k = (start+end)/2; long long t = arr[k]; if (t == aim) return true; else if (t > aim) end = k-1; else start = k+1; } return false; }
by bszmh @ 2018-08-10 19:51:28
@贞白吴啸 orz,3Q
by 梦游 @ 2018-08-10 19:56:27
@bszmh orz?厉害了, 我又学到了一个新词~
by ThebestJoe @ 2021-11-23 23:28:55
你好,这个两个二分我都用了(都已经ac),嗯就是你第一个wa的二分,它是二分一段连续的数,l=数组最小的数,r=数组最大的那个数。 第二个二分是二分数组的下标,它是一些离散的数(当然你要从小到大排序)速度也是要快一点的 第三,我不会告诉你这个题我提交了63次,哈哈哈