下面这个程序是能AC的:
#include <iostream>
#include <map>
using namespace std;
int n,m,f,num[1000010];
int solve(int l,int r,int k)
{
if(l == r)
{
if(num[l] == k)
{
return l;
}
return -1;
}
int mid = (l + r)/2;
if(k <= num[mid])
{
return solve(l,mid,k);
}
else
{
return solve(mid + 1,r,k);
}
}
int main()
{
cin >> n >> m;
for(int i = 1;i <= n;i++)
{
cin >> num[i];
}
for(int i = 0;i < m;i++)
{
cin >> f;
cout << solve(1,n-1,f) << ' ';
}
return 0;
}
但当数据为
11 3
1 3 3 3 5 7 9 11 13 13 15
1 3 15
时,应输出
1 2 11
这个程序会输出
1 2 -1
因为 solve(1,n-1,f)
不会查找到最后一个
将 n-1
改为 n
则输出正确
所以数据里大概没有答案是最后一个数的数据
望管理员修改