码迷,mamicode.com
首页 > 其他好文 > 详细

【二分】

时间:2018-05-12 21:42:09      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:log   头文件   缩小   target   二分   定义   scan   color   std   

类似最大(小)值最大(小)化的问题都可以用二分来解决。

可以定义一个条件 C(x)  那么就是求满足某个条件 C(X)的最小的x

如果所有的x‘>=x都满足C(x‘),那么就可以用二分搜索来求最小的x

左端点初始化为不满足条件的值,右端点初始化为满足条件的值,每次取中点mid,判断C(mid)是否满足并且缩小范围,直到足够小了为止。

 

 

另外,STL里的lower_bound   upper_bound是求二分的函数

#include <algorithm>//必须包含的头文件
#include <stdio.h>
using namespace std;
int main()
{
    int n,a[100],m;
    int left,right,i;
    scanf("%d",&n);//设初始数组内元素有n个
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);//插入的数为m
     left = upper_bound(a,a+n,m)-a;//按从小到大,m最多能插入数组a的哪个位置
     right = lower_bound(a,a+n,m)-a;//按从小到大,m最少能插入数组a的哪个位置
 
     printf("m最多能插入数组a的%d\n",left);
     for(i=0;i<left;i++)
        printf("%d ",a[i]);
    printf("%d ",m);
    for(i=left;i<n;i++)
        printf("%d ",a[i]);
 
    printf("\n");
 
    printf("m最少能插入数组a的%d\n",right);
    for(i=0;i<right;i++)
        printf("%d ",a[i]);
    printf("%d ",m);
    for(i=right;i<n;i++)
        printf("%d ",a[i]);
    return 0;
}

 

 

上例题!!

POJ 2456疯牛   这个是最大化最小值

【POJ】1064Cable master   这个是假定一个解并判断是否可行

 

 

【二分】

标签:log   头文件   缩小   target   二分   定义   scan   color   std   

原文地址:https://www.cnblogs.com/Kohinur/p/9029953.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!