Search II
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
Sample Input 3
5 1 1 2 2 3 2 1 2
Sample Output 3
2
#include <iostream>
using namespace std;
int a[100010], b[50010];
int n, q;
int binarySearch(int c)
{
int mid;
int left = 0, right = n - 1;
while(left <= right)
{
mid = left + (right - left) / 2;
if(a[mid] == c)
{
return 1;
}
else if(c < a[mid])
{
right = mid - 1;
}
else
{
left = mid + 1;
}
}
return 0;
}
int main()
{
int sum = 0;
cin >> n;
for(int i = 0; i < n; ++ i)
cin >> a[i];
cin >> q;
for(int i = 0; i < q; ++ i)
{
cin >> b[i];
if(binarySearch(b[i])) sum ++;
}
cout << sum << endl;
return 0;
}
#include <iostream>
#include <algorithm>
using namespace std;
int a[100010], b[50010];
int n, q;
int main()
{
int i;
cin >> n;
for(i = 0; i < n; ++ i)
cin >> a[i];
int sum = 0;
cin >> q;
for(i = 0; i < q; ++ i)
{
cin >> b[i];
if(*lower_bound(a, a + n, b[i]) == b[i]) sum ++;
}
cout << sum << endl;
return 0;
}