寒假培训——二分查找
二分查找
1.本题的答案设定是按照从a[0]开始输入制定的答案;
2.upper_bound返回第一个大于的元素的下标;
3.lower_bound返回第一个大于等于元素的下标;
4.例如int tmp = upper_bound(a, a+ 5, 7) -a;//按从小到大,7最多能插入数组a的哪个位置(数据从a[0]开始输的);
5.要先排序;
如果不用upper_bound
小清新的二分查找之旅
注意审题!!存在输出no,不存在输出YES;
小清新的函数坐标-二分
1.函数再[-20,20]为单调递增的;
2.不要漏掉中点恰好等于y的情况;
小清新的二倍问题加强版-二分-桶排
本题既可以利用桶排也可以利用二分
M1.桶排
M2.桶排
本题解的桶排思想值得学习,利用了两个数组来查找。
M3.二分
如果利用.lower_bound来做会超时,因为.lower_bound的运算速度要比传统的二分算法慢,如
而如果利用传统的二分算法,就不会超时。如
简单几何-二分
这题要特别注意精度:
1、π用acos(-1.0)表示
2、写原始式v2-v1,如果化简v2-v1= h * ( p * r * r - r )= h * r * ( p * r * - 1 ),精度会错
3、实际上还要保留到8位小数而不是4位小数(题目的bug)
小清新切绳子-二分
二分查找最大值的最小值为ans,judge函数中return的时候大于和等于是同一种情况,等于号在judge(m)中,则满足if(judge(m))时记下ans=m。
卖古董-DP-二分
二分查找最大值的最小值为ans,judge函数中return的时候小于和等于是同一种情况,等于号在judge(m)中,则满足if(judge(m))时记下ans=m。
切绳子实数版-二分
思路:实数二分,化实数为整数。
1.实数二分,精度会缺失(如果直接用double二分,最后%.2lf输出的时候会自动向上取整,可能改变了答案),解决办法是先把每根绳子长度a[i]乘2.以100化为整数,再按整数的方法二分,最后输出答案时再除以100即可。
注意在二分过程中要特判m=0的情况(否则在judge函数中会除以0导致RE),m=0时直接break退出二分循环,记下答案ans=0。