基本——二分

  • 815 字

二分查找和二分答案(最大的最小,最小的最大,最值问题)。

//二分查找可用lower_bound和upper_bound函数实现
//最大
long long l = 最小可能值, r = 最大可能值, ans = 0;
while (l <= r) {
    long long mid = l + (r - l) / 2;
    if (check(mid)) {   
        ans = mid;     
        l = mid + 1;
    } else {           
        r = mid - 1;
    }
}
cout << ans << endl;
//最小
long long l = 最小可能值, r = 最大可能值, ans = 0;
while (l <= r) {
    long long mid = l + (r - l) / 2;
    if (check(mid)) {  
        ans = mid;    
        r = mid - 1;
    } else {           
        l = mid + 1;
    }
}
cout << ans << endl;
//浮点二分
double l = 左边界, r = 右边界; 
const double eps = 1e-8; 
while (r - l > eps) {
double mid = (l + r) / 2;
if (check(mid)) r = mid;
else l = mid;
}
cout<< l ;