题目描述
输入n(n )个不超过的单调不减的(就是后面的数字不小于前面的数字)非负整数,...,,然后进行m(m )次询问。对于每次询问,给出一个整数q(q),要求输出这个数字在序列中最后一次出现的编号,如果没有找到的话输出−1。
输入
第一行2个整数n和m,表示数字个数和询问次数。
第二行n个整数,表示这些待查询的数字。
第三行m个整数,表示询问这些数字的编号,从1开始编号。
输出
m 个整数表示答案。
代码
#include<iostream>
using namespace std;
const int N = 1e6+10;
int n,m;
int a[N];
int get_right(int x){
int l = 1,r = n;
while(l < r){
int mid = l + r + 1 >> 1;
if(x >= a[mid]){
l = mid;
} else {
r = mid - 1;
}
}
return a[l] == x ? l : -1;
}
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++){
cin >> a[i];
}
while(m--){
int x;
cin >> x;
cout << get_right(x) << " ";
}
return 0;
}