2016-07-13 19:20:06
使用手写二分实现lower_bound与upper_bound:
lower_bound: 第一个 >= v 的位置。
upper_bound: 第一个 > v 的位置。
lower_bound:
int l = 1,r = n,ans; while(l < r){ int mid = getmid(l,r); if(A[mid] < v) l = mid + 1; else r = mid; } ans = l;
upper_bound:
写法1:
int l = 1,r = n,ans; while(l <= r){ int mid = getmid(l,r); if(A[mid] <= v) l = mid + 1; else r = mid - 1; } ans = l;
写法2:
int l = 1,r = n,ans; while(l < r){ int mid = getmid(l,r); if(A[mid] <= v) l = mid + 1; else r = mid; } if(A[l] <= v) l++; ans = l;
本文介绍了如何使用手写二分法实现lower_bound与upper_bound的功能。lower_bound找到第一个大于等于给定值的位置,而upper_bound则定位到第一个大于给定值的位置。文章提供了两种不同的upper_bound实现方式。
1066

被折叠的 条评论
为什么被折叠?



