AcWing 789. 数的范围java 1100ms
原题链接
简单
作者:
mkuiwu
,
2020-12-05 13:44:05
,
所有人可见
,
阅读 421
import java.io.*;
import java.util.*;
class Reader {
static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer tokenizer = new StringTokenizer("");
static String nextLine() throws IOException {// 读取下一行字符串
return reader.readLine();
}
static String next() throws IOException {// 读取下一个字符串
while (!tokenizer.hasMoreTokens()) {
tokenizer = new StringTokenizer(reader.readLine());
}
return tokenizer.nextToken();
}
static int nextInt() throws IOException {// 读取下一个int型数值
return Integer.parseInt(next());
}
static double nextDouble() throws IOException {// 读取下一个double型数值
return Double.parseDouble(next());
}
}
public class Main {
final int N = 100010;
int[] a = new int[N];
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
public void init() throws Exception {
int n, q;
n = Reader.nextInt();
q = Reader.nextInt();
for (int i = 0; i < n; i++) {
a[i] = Reader.nextInt();
}
while (q-- > 0){
int k = Reader.nextInt();
int l = 0, r = n-1;
while (l<r){ // 这样是找到最左边的值
int mid = l + r >> 1;
if (a[mid] >= k) r = mid;
else l=mid+1;
}
if (a[l] != k) bw.write("-1 -1\n");
else {
bw.write(l + " ");
l = 0; r = n-1;
while (l<r){//这边是最右区域包含
int mid = l + r + 1>> 1;
if (a[mid] <= k) l = mid;
else r = mid - 1;
}
bw.write(l + "\n");
}
}
bw.flush();
}
public static void main(String[] args) throws Exception {
new Main().init();
}
}