标签: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