#10230. 第一次出现的位置(二分)

第一次出现的位置(二分)

✅ Problem: 第一次出现的位置(二分)


题目描述

请在一个有序不递减 的数组中查找给定值 xx 第一次出现的位置(即最左边的位置)。 如果数组中不存在该值,请输出 -1

你需要回答 qq 个询问,每个询问给定一个 xx请输出其在数组中​第一次出现的位置 * *​(从 1 开始计数)。


输入格式

  • 第一行一个整数 nn1n1051 \leq n \leq 10 ^ 5)——数组的长度;

  • 第二行 nn 个非负整数(有序、不递减);

  • 第三行一个整数 qq1q1051 \leq q \leq 10 ^ 5)——询问次数;

  • 第四行 qq 个整数,每个表示一个要查找的数字 xx


输出格式

  • 一行 qq 个整数,表示每个 xx 第一次出现的位置(从 1 开始计数),若不存在则输出 -1

输入样例

6
1 2 2 2 3 3
3
3 2 5

输出样例

5 2 - 1

题目说明

  • 数组中可能有重复值;

  • 输出的位置按输入的 xx 顺序返回;

  • 你需要使用 * *二分查找 * *完成此任务。


✅ 提示

  • 本题可以使用 lower_bound()(或手动写二分)寻找最左下标;
  • 时间复杂度:O(qlogn)O(q \log n),可通过所有数据。