下面是C++的实现代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int n, q;
cin >> n;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
sort(nums.begin(), nums.end());
cin >> q;
while (q--) {
int num;
cin >> num;
auto it1 = lower_bound(nums.begin(), nums.end(), num);
auto it2 = upper_bound(nums.begin(), nums.end(), num);
int pos1 = (it1 == nums.end() || *it1 != num) ? -1 : it1 - nums.begin();
int pos2 = (it2 == nums.begin() || *(it2 - 1) != num) ? -1 : (it2 - 1) - nums.begin();
int pos3 = (it2 == nums.end()) ? -1 : it2 - nums.begin();
cout << pos1 << " " << pos2 << " " << pos3 << endl;
}
return 0;
}
输入样例:
6
1 2 3 3 4 5
3
2
3
6
输出样例:
1 1 2
2 3 4
-1 -1 -1
解释:
对于第一个询问,整数序列为1 2 3 3 4 5,2在序列中的位置是1,第一个等于2的位置是1,最后一个等于2的位置是1,第一个大于2的位置是2。
对于第二个询问,整数序列为1 2 3 3 4 5,3在序列中的位置是2,第一个等于3的位置是2,最后一个等于3的位置是3,第一个大于3的位置是4。
对于第三个询问,整数序列为1 2 3 3 4 5,6不在序列中,输出-1。