【算法】二分789. 数的范围
题目
数的范围
思路
用二分法先找出数的开头,如果能找到开头,则再用一次二分找结尾,如果找不到则直接返回-1,-1。注意计算mid时有两种情况,一种需要加一,一种不需要。如果不加1可能会出现死循环的情况。
代码
#include<iostream>
using namespace std;
const int N = 100010;
int n, m;
int q[N];
int main()
{cin >> n >> m;for (int i = 0;i < n;i++)cin >> q[i];while (m--){int x;cin >> x;int l = 0, r = n - 1;while(l < r){int mid = (l + r) / 2;if (q[mid] >= x)r = mid;elsel = mid + 1;}if (q[l] != x)cout << "-1 -1" << endl;else{cout << l << " ";int l = 0, r = n - 1;while (l < r){int mid = (l + r + 1) / 2;if (q[mid] <= x)l = mid;elser = mid - 1;}cout << l << endl;}}return 0;
}