y总整数二分代码模板

//y总二分模板 整数二分
#include
using namespace std;
const int N = 1e5 + 9;
int n, m, a[N];

int main()
{
	ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
	cin >> n >> m;
	for (int i = 0; i < n; ++i) cin >> a[i];

	while (m--)
	{
		int x; cin >> x;
		int l = 0, r = n - 1;
		while (l < r)
		{
			int mid = l + r >> 1;
			if (a[mid] >= x) r = mid;//在左半区间
			else l = mid + 1;
		}
		// 若序列中没有等于 k 的元素,查找出的是第一个大于 x 的元素的下标
		if (a[l] != x) cout << "-1 -1" << '\n';
		else
		{
			cout << l << " ";//输出r也一样
			int l = 0, r = n - 1;
			while (l < r)
			{
				int mid = l + r + 1 >> 1;
				if (a[mid] <= x) l = mid;//右半区间
				else r = mid - 1;
			}
			cout << l << '\n';
		}

	}

	return 0;
}

你可能感兴趣的:(c++,算法)