5.4
洛谷P1918 保龄球
二分查找+结构体存序号
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
int n,q,m;
struct ball{
int num;//数量
int pos;//位置
} a[100010];
bool cmp(ball a,ball b){
return a.num<b.num; //数量从小到大排
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i].num;
a[i].pos=i;
}
sort(a+1,a+n+1,cmp);
cin>>q;
while(q--){
cin>>m;
int l=0,r=n+1;
while(l+1<r){
int mid=(l+r)/2;
if(a[mid].num<m)
l=mid;
else
r=mid;
}
if(a[r].num==m)
cout<<a[r].pos<<endl;
else
cout<<0<<endl;
}
return 0;
}