xtlnb666 @ 2023-02-05 12:09:31
#include <bits/stdc++.h>
using namespace std;
int a[1000005];
void check(int l, int r, int key) {
int p = (l + r) / 2;
int flag = a[p];
if (l > r) {
cout << -1 << " ";
} else if (flag == key) {
while (a[p] == key) {
p--;
}
cout << p + 2 << " ";
} else if (key < flag) {
check(l, p - 1, key);
} else {
check(p + 1, r, key);
}
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
for (int i = 0; i < m; i++) {
int j;
cin >> j;
check(0, n - 1, j);
}
return 0;
}
by Wtmwy @ 2023-02-18 23:05:03
最后一个超时是因为可能第一次就在a数组中间找到了这个数,但是你还要一个一个往前找是否有相同的,就如你写的while (a[p] == key) {p--;}这样耗费时间很多
by Wtmwy @ 2023-02-18 23:08:54
@xtlnb666 第一个错误是因为可能找到a[0]之后还向前,建议你的while (a[p] == key) {p--;}加一个if(p==0) break;
by xtlnb666 @ 2023-02-20 18:30:09
@z2475547481 谢谢
by Wtmwy @ 2023-02-20 23:19:58
@xtlnb666如若通过,求关注
by mooktian @ 2023-03-24 16:06:29
@Wtmwy 谢谢,关注你了。