更新时间2021-05-09 01:06:05
题目描述:给出有n个元素的由小到大的序列,请你编程找出每次询问的某元素第一次出现的位置,共询问m次。(n<=2,000,000,m<=100,000,序列中的数值均小于10^5) 输入格式:一个整数n,表示由小到大序列元素个数;第二行有n个整数;第三行一个整数,表示询问的次数m;接着有m行,每行一个整数x,表示待查找的元素; 输出格式:针对每次询问,如果x在序列中,则输出x第一次出现的位置,否则输出-1。每个询问单独输出一行。 样例输入:5
3 5 6 6 7
1
6样例输出:3有没有AC的答案啊,代码一直超时,求!!!
试试以下程序(34563478562783452785423785423785437856823):
#include <iostream> int a[2000000]; ///全变量,可提高效率 int n; using namespace std; int BinSearch(int k) { int low=0,high=n-1; int mid; while(low<=high) { mid=(low+high)/2; if(k<a[mid]) high=mid-1; else if(k>a[mid]) low=mid+1; else return mid+1; } return -1; } int main() { int i,m,k; cin >> n; for(i=0;i<n;i++) cin >> a[i]; cin >> m; for(i=0;i<m;i++) { cin >> k; cout << BinSearch(k) << endl; } return 0; }