1587. Eat or Be Eaten
2011-05-11 13:53 Min·zc 阅读(234) 评论(0) 编辑 收藏 举报二分查找小于目标元素的最后一个元素的位置,注意每一组元素是不需要去重复的。
-------------------------------------------------------------------------------------------------------
1 #include <iostream>
2 #include <algorithm>
3 #include <memory.h>
4 using namespace std;
5 int A[20001];
6 int B[20001];
7 int cmp(const void* a, const void* b)
8 {
9 return *(int*)a-*(int*)b;
10 }
11 int bnr(int h,int r,int x)
12 {
13 int mid=(h+r)/2;
14 if(B[r-1]<x)
15 return r;
16 else if(B[0]>=x)
17 return 0;
18 while(h<=r)
19 {
20 mid=(h+r)/2;
21 // cout<<nb[mid]<<" "<<x<<endl;
22 if(B[mid]>=x)
23 r=mid-1;
24 else
25 h=mid+1;
26 }
27 return h;
28 }
29 int main()
30 {
31 int t;
32 cin>>t;
33 while(t--)
34 {
35 memset(A,0,sizeof(A));
36 memset(B,0,sizeof(B));
37 int n,m;
38 cin>>n>>m;
39 for(int i=0;i<n;i++)
40 cin>>A[i];
41 for(int i=0;i<m;i++)
42 cin>>B[i];
43 qsort(A,n,sizeof(A[0]),cmp);
44 qsort(B,m,sizeof(B[0]),cmp);
45 int ans=0;
46 for(int i=0;i<n;i++)
47 {
48
49 int tem=bnr(0,m,A[i]);
50 // cout<<tem<<endl;
51 ans+=tem;
52 }
53 cout<<ans<<endl;
54 }
55
56 }