#include <iostream>
#include <vector>
#include <algorithm>
int binarySearch(const std::vector<int> &marbles, int query)
{
int low = 0;
int high = marbles.size() - 1;
int result = -1;
while (low <= high)
{
int mid = low + (high - low) / 2;
if (marbles[mid] == query)
{
result = mid;
high = mid - 1; // Keep searching for the first occurrence
}
else if (marbles[mid] < query)
{
low = mid + 1;
}
else
{
high = mid - 1;
}
}
return result;
}
int main()
{
int N, Q, caseNum = 0;
while (std::cin >> N >> Q)
{
if (N == 0 && Q == 0)
break;
std::vector<int> marbles(N);
for (int i = 0; i < N; ++i)
{
std::cin >> marbles[i];
}
std::sort(marbles.begin(), marbles.end());
std::cout << "CASE# " << ++caseNum << ":" << std::endl;
for (int i = 0; i < Q; ++i)
{
int query;
std::cin >> query;
int result = binarySearch(marbles, query);
if (result != -1)
{
std::cout << query << " found at " << (result + 1) << std::endl;
}
else
{
std::cout << query << " not found" << std::endl;
}
}
}
return 0;
}
加分題 Bonus - 二分搜尋法 Binary Search
最新推荐文章于 2024-09-12 23:51:52 发布