利用二分查找找出所给出的数在数组中的下标
输入格式:
第一行输入n和m表示数组有n个数据,m表示要对m个数进行查找
输出格式:
所有输出在一行完成,行末没有多余空格和多余回车。
输入样例:
5 5
1 2 3 4 5
1 2 3 4 5
输出样例:
0 1 2 3 4
思路
题越简单,事越多。。。。。
经历了n次运行超时,和段错误
还有一个事,我发现就是只要是时间限制50ms的用cin,cout肯定段错误
运行超时还好,加个加速器就能解决,段错误。。。。。。
我发现的是
vector xx;也可写成xx[n];
然后这个题不要脸的是
要是写成xx[1000]或者xx[1000000]就会所有测试点段错误
这个数组空间大小就很迷惑,要是数组越界也应该是一部分测试点越界的事啊,难道所有测试点数量都很大吗
ε=(´ο`*)))唉
代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int n,m,x;
cin>>n>>m;
vector<int> xx;
for(int i=0;i<n;i++){
cin>>x;
xx.push_back(x);
}
int flag=0;
for(int i=0;i<m;i++){
cin>>x;
if(flag) cout<<" ";
flag=1;
int mid=0,low=0,high=n-1;
while(low<=high){
mid=low+(high-low)/2;
if(x==xx[mid]) break;
else if(xx[mid]>x) high=mid-1;
else low=mid+1;
}
cout<<mid;
}
return 0;
}