武汉ACM集训——二分和尺取-1
题解
典型的二分查找题
二分查找首次出现 ans 的位置的下标,最后出现 ans 的位置的下标。
AC代码
#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int main()
{
int n, q;
scanf("%d%d", &n, &q);
// 存数据
int a[maxn];
for (int i = 0; i < n; ++i)
{
scanf("%d", &a[i]);
}
while (q--)
{
int ans;
scanf("%d", &ans);
// 二分查找
int l = lower_bound(a + 0, a + n, ans) - a;
int r = upper_bound(a + 0, a + n, ans) - a;
// 如果未查到,l == r && l == n
// 第二种情况时,a[l] != ans
if ((l == r && l == n) || (a[l] != ans))
printf("-1 -1\n");
else
printf("%d %d\n", l, r - 1);
}
return 0;
}