记录一下这个题遇到的坑吧,其实这题很简单但是做题的时候脑子不转圈了。。
本来想着用这个直接秒来着
cout<<lower_bound(w.begin(), w.end(), x) - w.begin()<<" ";
但是一看-1;又饶了一大圈。。。
int low=1,high=n;
while(low<=high){
mid=(low+high)/2;
if(x<=w[mid]){
high=mid-1;
}
else{
low=mid+1;
}
}
if(low<=high){
cout<<mid<<" ";
}
else{
cout<<"-1"<<endl;
}
自己写了这个zz的代码,但是导致了。这种神奇的情况。
注意到找3的位置时输出了3..............
然后死活想不出来怎么做。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
vector<int>w(n);
for(int i=1;i<=n;i++){
cin>>w[i];
}
for(int i=0;i<m;i++){
int x;
cin>>x;
int l = 1, r = n;
while(l <= r){
int mid = (l + r) / 2;
if(w[mid] >= x){
r = mid - 1;
}
else{
l = mid + 1;
}
}
if(w[l]==x){
cout<<l<<" ";
}
else{
cout<<-1<<" ";
}
// int low=1,high=n;
// while(low<=high){
// mid=(low+high)/2;
// if(x<=w[mid]){
// high=mid-1;
// }
// else{
// low=mid+1;
// }
// }
// if(low<=high){
// cout<<mid<<" ";
// }
// else{
// cout<<"-1"<<endl;
// }
}
return 0;
}