题目描述
给定一个按照升序排列的长度为n的整数数组,以及 q 个查询。
对于每个查询,返回一个元素k的起始位置和终止位置(位置从0开始计数)。
如果数组中不存在该元素,则返回“-1 -1”。
输入格式
第一行包含整数n和q,表示数组长度和询问个数。
第二行包含n个整数(均在1~10000 1000010000范围内),表示完整数组。
接下来q行,每行包含一个整数k,表示一个询问元素。
输出格式
共q行,每行包含两个整数,表示所求元素的起始位置和终止位置。
如果数组中不存在该元素,则返回“-1 -1”。
数据范围
1 ≤ n ≤ 100000
1 ≤ q ≤ 10000
1 ≤ k ≤ 10000
输入样例
6 3
1 2 2 3 3 4
3
4
5
1
2
3
4
5
输出样例
3 4
5 5
-1 -1
代码
import java.util.Scanner;
class Main
{
static int n,k;
static int[] a = new int[10];
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
n=sc.nextInt();
k=sc.nextInt();
for(int i=0;i<n;i++)
{
a[i] = sc.nextInt();
}
for(int i=0;i<k;i++)
{
int x=sc.nextInt();
f(x);
}
}
public static void f(int x)
{
int m=-1;
int l=0,r=n-1;
//求左边界
while(l<r)
{
m=(l+r)/2;
if(a[m]>=x) r=m;
else l=m+1;
}
if(a[r]==x)
{
System.out.print(l+" ");
//右边界
r=n-1;
while(l<r)
{
m=(l+r+1)/2;
if(a[m]<=x) l=m; //这里是l=m,所以m=(l+r+1)/2这里要补个一,不然会陷入死循环
else r=m-1;
}
System.out.println(r+" ");
}
else System.out.print("-1 -1");
}
}