すべての値を開始し、終了してベクトルまたは配列にダンプしてから並べ替えます。範囲が重複しないので、配列がソートされると、開始、停止、開始、停止などが行われます。次に、バイナリ検索を使用してベクトルのインデックスを見つけることができます。そして、その問題だけかどうか、その奇数または偶数
を想定し、うまくいけば、私はdidnの、あなたはバイナリ検索が
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);
}
として定義されるだろうストリーム
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";
}
}
から範囲を取得しています」バイナリ検索を失敗させますが、値が見つからない場合は、次に大きい値のインデックスが返されるように設計されています。
範囲は重複していますか?特定の数字の範囲を見つけることは、ユニークな答えをもたらしますか? – ravenspoint
は範囲が重複していますか? –
あなたはいくつの範囲を持っていますか?どのくらいの頻度で変更されますか?値の総数はどのくらいですか(つまり、max-min)ですか? –