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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | #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; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #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; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步