題目要求找到對應的值,數據範圍在10^5內,因此不能循環枚舉每一個值判斷。
那麼就需要一個高效的算法,根據所求在數組內查找相同值,可以使用stl庫裏的set查詢,也可以二分
二分的話要把數據排序,但要對應輸出未排序的下標,所以需要用struct來儲存一個mark爲未排序的下標
#include<iostream>
#include<iomanip>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
int n; int k=0;
struct node{
int mark,ball;
}a[100001];
int cmp(node x,node y)
{
return x.ball<y.ball;
}
int erfen(int l,int r)
{
while(l<=r)
{
int mid=(l+r)/2;
if(k>a[mid].ball) l=mid+1;
else r=mid-1;
}
if(a[l].ball==k) cout<<a[l].mark<<endl;
else cout<<"0"<<endl;
}
int main()
{
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>a[i].ball;
a[i].mark=i;
}
sort(a+1,a+n+1,cmp);
int q;cin>>q;
for(int i=1;i<=q;++i)
{
k=0;
cin>>k;
erfen(1,n);
}
return 0;
}