二分和三分模板
2013-10-19 15:35
387 查看
注意一点,double的循环条件中最好使用以下的表示(L + EPS < R),如果使用dcmp(R - L)> 0判断也可以,但是使用dcmp函数时候一定不能写等号,因为如果两个double数在EPS范围内相等的还继续的话会导致死循环
二分:
(递增)
(递减)
三分:
int的三分:
网上没有现成的,只能自己写一个。。。
计算最小值的三分:
计算最大值的三分:
二分还是stl的简单,还是贴上自己的代码,以备后用
int的二分(闭区间):
二分:
(递增)
double calc(double n) { return ; } double solve(double L, double R, double v) { double M; while (L + EPS < R) { M = (L + R) / 2; if (calc(M) > v) R = M; else L = M; } return R; }
(递减)
double calc(double n) { return ; } double solve(double L, double R, double v) { double M; while (L + EPS < R) { M = (L + R) / 2; if (calc(M) < v) R = M; else L = M; } return R; }
三分:
const double EPS = 1e-10; double calc(double n) { return; } double solve(double L, double R) { double M, RM; while (L + EPS < R) { M = (L + R) / 2; RM = (M + R) / 2; if (calc(M) < calc(RM)) //计算最小值 R = RM; else L = M; } return L; }
int的三分:
网上没有现成的,只能自己写一个。。。
计算最小值的三分:
int calc(int n) { return ; } int solve(int L, int R) { int M, RM, VM, VRM; while (L + 1 < R) { M = (L + R) / 2; RM = (M + R) / 2; VM = calc(M); VRM = calc(RM); if (VM < VRM) R = RM; else if (VM > VRM) L = M; else break; } M = (L + R) / 2; int vl = calc(L), vm = calc(M), vr = calc(R); if (vl <= vm && vl <= vr) return L; else if (vm <= vl && vm <= vr) return M; return R; }
计算最大值的三分:
int calc(int n) { return; } int solve(int L, int R) { int M, RM, VM, VRM; while (L + 1 < R) { M = (L + R) / 2; RM = (M + R) / 2; VM = calc(M); VRM = calc(RM); if (VM > VRM) //计算最小值 R = RM; else if (VM < VRM) L = M; else break; } M = (L + R) / 2; int vl = calc(L), vm = calc(M), vr = calc(R); if (vl >= vm && vl >= vr) return L; else if (vm >= vl && vm >= vr) return M; return R; }
二分还是stl的简单,还是贴上自己的代码,以备后用
int的二分(闭区间):
//YES_LEFT, NO_RIGHT int bSearch(int l, int r, int v) { int m; while (l <= r) { m = (l + r) >> 1; if (n[m] < v) l = m + 1; else r = m - 1; } return l; }
//YES_RIGHT, NO_LEFT int bSearch(int l, int r, int v) { int m; while (l <= r) { m = (l + r) >> 1; if (n[m] <= v) l = m + 1; else r = m - 1; } return r; }
相关文章推荐
- 二分+三分模板
- 二分、三分查找算法模板
- 二分查找、三分查找求极点、二分求等比数列【模板】
- 洛谷 P3382 【模板】三分法(三分 二分)
- 二分+三分模板
- 【二分】【三分】【计算几何】XIII Open Championship of Y.Kupala Grodno SU Grodno, Saturday, April 29, 2017 Problem L. Lines and Polygon
- CSU-ACM2017寒假集训1B-简单二分和三分 HDU - 2141
- 模板--二分查找
- 二分搜索和三分搜索
- Toxophily(hdu2298三分+二分)
- ACM 暑期培训——二分/三分专题
- 山东省第八届acm省赛E题 三分+二分
- poj 1469 COURSES(二分匹配模板)
- CodeForces 631E Product Sum(斜率优化DP+二分|三分)
- hdu 过山车 二分匹配模板
- 二分答案 模板
- 二分模板
- 1489: L先生与质数V4(二分+大区间求素数模板)
- 紫书第八章-----高效算法设计(二分查找、尺取法/滑动窗口法、三分查找)
- CF 8D Two Friends (三分+二分)