有 n个数(n≤1000000),这 n个数已按从大到小顺序存放在一个数组中,然后有 T次查询,每次输入一个数,要求用折半查找法找出该数在数组中第一次出现的位置。如果不在数组中输出 0。
输入第一行数组元素的个数 n。
第二行 n 个数组元素的值。
第三行输入查询次数 T(T≤100000)。
往下有 T 行,每行输入一个需要查询的数字。
输出查找的值在数组中的位置。
输入输出样例样例输入 #1
10 10 9 8 7 6 5 4 3 2 1 2 9 5
样例输出 #1
2 6
参考解答:
#include#include using namespace std; int arr[1000000]; int f(int length, int num); int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &arr[i]); int T, num; scanf("%d", &T); while (T--) { scanf("%d", &num); printf("%dn", f(n, num)); } } int f(int length, int num) { int up = length - 1, down = 0, mid; int location = -1; while (up >= down) { mid = (up + down) / 2; if (arr[mid] < num) up = mid - 1; if (arr[mid] > num) down = mid + 1; if (arr[mid] == num) { up = mid - 1; location = mid; } } return location + 1; }



