这个题其实就是一个二分查找的练习,如果不想写二分查找代码的就直接写lower_bound(int(查找的数))。二分查找相比普通查找他的复杂度是log2n。
- #include
- 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]
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
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
size();i++)printf(" %d",c[i]); - }