二分模板

想象l,区间所有的数都满足条件

求满足条件的最大值:如果l, r 范围的数都满足条件,那势必要取中时加一,即偶数时候取下一位,那就确定了查找范围是在【l,mid-1】,【mid,r】;要区分出最右端,势必要判断右边的不合法情况:

while(l<r){
   int mid=l+r+1 >>1;
    if(mid>traget) r=mid-1; 
   else l=mid;
} 

 

 

求满足条件的最小值:如果l, r 范围的数都满足条件,那势必要取中,即偶数时候取前一位,那就确定了查找范围是在【l,mid】,【mid+1,r】;要区分出最左端,势必要判断左边的不合法情况:

while(l<r){
   int mid=l+r >>1;
    if(mid<traget) l=mid+1; 
   else r=mid;
} 

 

posted @ 2021-12-18 23:31  兮何其  阅读(21)  评论(0)    收藏  举报