Binary Search
You are given a sequence of n integers S and a sequence of different q integers T. Write a program which outputs C, the number of integers in T which are also in the set S.
Input
In the first line n is given. In the second line, n integers are given. In the third line q is given. Then, in the fourth line, q integers are given.
Output
Print C in a line.
Constraints
- Elements in S is sorted in ascending order
- n ≤ 100000
- q ≤ 50000
- 0 ≤ an element in S ≤ 109
- 0 ≤ an element in T ≤ 109
Sample Input 1
5 1 2 3 4 5 3 3 4 1
Sample Output 1
3
Sample Input 2
3 1 2 3 1 5
Sample Output 2
0
Notes
代码如下:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 5;
int n,sum = 0;
int a[maxn];
bool find(int key){
int l = 0,r = n;
while(l < r){
int mid = (l+r)>>1;
if(a[mid] < key){
l = mid+1;
}
else if(a[mid] > key){
r = mid;
}
else{
return true;
}
}
return false;
}
int main(){
scanf("%d",&n);
for(int i = 0;i < n; i++){
scanf("%d",&a[i]);
}
sort(a+1,a+n+1);
int q;
scanf("%d",&q);
for(int i = 0;i < q; i++){
int key;
scanf("%d",&key);
if(find(key)){
sum++;
}
}
printf("%d\n",sum);
}