标签:span else 不同 class code while 不能 pre 二分答案
二分答案本质已经出来了
就是每次根据m次比较,找最值(只要有m次操作,有序单调基本都可用)
最小最大和最大最小略有不同(走的方向更新解的方向刚好相反,理解了本质都一样)
关键和难点还是写judge函数怎么找到每次枚举答案的次数,怎么找到写出m次。
1 while(l<=r)//最小值最大化 2 { 3 ll mid=(l+r)/2; 4 5 int t=judge(mid); 6 if(t<=m)//t<=是不变的,<=m都是可行解,ans必定放在这里更新 7 { 8 l=mid+1;//往右区间高方向试试能不能更大解 9 ans=mid; 10 } 11 else r=mid-1; 12 } 13 14 while(l<=r)//最大值最小化 15 { 16 ll mid=(l+r)/2; 17 18 int t=judge(mid); 19 if(t<=m)//t<=m是不变的,<=m次都是可行解,ans必定放在这里更新 20 { 21 r=mid-1;//往左区间低方向试试能不能更小解 22 ans=mid; 23 } 24 else l=mid+1; 25 }
标签:span else 不同 class code while 不能 pre 二分答案
原文地址:https://www.cnblogs.com/redblackk/p/9937604.html