这个题其实就是一个二分查找的练习,如果不想写二分查找代码的就直接写lower_bound(int(查找的数))。二分查找相比普通查找他的复杂度是log2n。
#include<bits/stdc++.h>
using namespace std;
int find(int *b,int k,int n)
{
int left=0,right=n-1;
int mid;
while(left<=right)
{
mid=(left+right)/2;
if(b[mid]>k)right=mid-1;
else if(b[mid]<k)left=mid+1;
else return mid;
}
return -1;
}
int main()
{
int x,y;scanf("%d%d",&x,&y);
int b[x];
vector<int>c;
for(int i=0;i<x;i++)scanf("%d",&b[i]);
sort(b,b+x);
int k;
while(y--){
scanf("%d",&k);
if(find(b,k,x)!=-1)c.push_back(find(b,k,x));
}
int u=(c.size()/2)+1;
printf("%d",c[0]);
for(int i=1;i<c.size();i++)printf(" %d",c[i]);
}