二分:
lower_bound()在first和last二分查找(前闭后开),返回第一个大于等于x的位置
upper_bound()返回第一个大于x的位置
区别:>=和>,即保持非降序的第一个可安插位置和最后一个可安插位置
int lowerBound(int x){
int l=1,r=n;
while(l<=r){
int mid=(l+r)>>1;
if (x>g[mid]) l=mid+1;
else r=mid-1;
}
return l;
}