二分模板
Posted redblackk
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分模板相关的知识,希望对你有一定的参考价值。
二分答案本质已经出来了
就是每次根据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 }
以上是关于二分模板的主要内容,如果未能解决你的问题,请参考以下文章