求助!20分
查看原帖
求助!20分
800884
Weekoder楼主2023/11/29 20:22

想知道错的原因,我的二分方法是在B站五点七边学的 求助

#include <bits/stdc++.h>
using namespace std;

const int kMaxN = 1e5 + 1;

int n, m, a[kMaxN], b[kMaxN];

bool binary_search(int x) {
	int l = 0, r = n + 1;
	while (l + 1 != r) {
		int m = l + ((r - l) >> 1);
		if (a[m] <= x)
		    l = m;
		else
		    r = m;
	}
	if (a[l] == x)
	    return 1;
	else	
	    return 0;
}

int main() {
	cin >> n >> m;
	for (int i = 1; i <= n; i++) cin >> a[i];
	for (int i = 1; i <= m; i++) cin >> b[i];
	sort(b + 1, b + 1 + m);
	sort(a + 1, a + 1 + n);
	for (int i = 1; i <= m; i++)
		if (binary_search(b[i]))
			cout << b[i] << " ";
	return 0;
}
2023/11/29 20:22
加载中...