#include<bits/stdc++.h>
using namespace std;
struct baoling{
int pos;
int sum;
};
baoling a[100005];
bool cmp(baoling a,baoling b){
return a.sum<b.sum;
}
int main(){
int n;
cin >>n;
for(int i=1;i<=n;i++){
cin >>a[i].sum;
a[i].pos=i;
}
sort(a+1,a+n+1,cmp);
int q;
cin >>q;
for(int i=1;i<=q;i++){
int l=1,r=n,mid,ans=0;
int m;
cin >>m;
while(l<=r){
mid=(l+r)/2;
if(m>a[mid].sum){
l=mid+1;
}
else if(m<a[mid].sum){
r=mid-1;
}
else{
ans=a[mid].pos;
break;
}
}
cout <<ans<<endl;
}
return 0;
}
这题如果用结构体排序+二分查找的方法做,那时间复杂度是啥?求解答
代码: