просто выведите все значения, начиная и заканчивая вектором или массивом, а затем сортируйте их.поскольку диапазоны не перекрываются, после сортировки массива у вас будет запуск, остановка, запуск, остановка и т. д., затем вы можете использовать двоичный поиск, чтобы найти индекс вектора.тогда вопрос только в том, является ли он нечетным или четным
при условии, что вы получаете диапазоны из потока
vector<int> ranges;
int n;
while(in >> n){
ranges.push_back(n);
}
sort(ranges.begin(),ranges.end())
int x;
cout <<"please enter a value to search for: ";
cin >> x;
int index = binary_search(x,ranges);
if(index % 2){
cout << "The value " << x << "is in the range of "
<< ranges[index-1] << " to " << ranges[index] << endl;
}else{
if(ranges[index] == x){
cout << "The value " << x << "is in the range of "
<< ranges[index] << " to " << ranges[index+1] << endl;
}
else{
cout << "Value " << x << " is not in any range\n";
}
}
, где двоичный поиск будет определен как
int binary_search(int x, vector<int>& vec, int s = 0; int f = -1){
if(f == -1)f=vec.size();
if(s >= f) return s;
int n = (f-s)/2 + s;
if(vec[n] == x)return n;
if(vec[n] < x)return binary_search(x,vec,s,n-1);
return binary_search(x,vec,n+1,f);
}
надеюсь, я не испортил бинарный поиск, но он спроектирован таким образом, что, если значение не найдено, возвращается индекс следующего по величине значения.