Binary Search
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; }