// 二分查找找到最接近并小于val的, 返回标号, start指向第一个元素,end指向最后一个元素,如果全部比val大, 就返回-1
int findFloor(int val, vector<int> &v, int start, int end){
if(start > end){
return start - 1;
}
if(val < v[start]){
return start - 1;
}
else if(val > v[end]){
return end;
}
while(start <= end){
int mid = (start + end)/2;
if(v[mid] > val){
end = mid - 1;
}
else if(v[mid] < val){
start = mid + 1;
}
else{
return mid - 1;
}
}
return end;
}