常規版本(400+ms)
#include <iostream>
#define MAXN 1000010
using namespace std;
int a[MAXN];
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int n, m;
cin >> n >> m;
for (register int i = 0; i < n; ++i) {
cin >> a[i];
}
for (register int i = 0; i < m; ++i) {
int target;
cin >> target;
int l = 0;
int r = n - 1;
while (l <= r) {
int mid = (l + r) >> 1;
if (a[mid] < target) {
l = mid + 1;
}
else {
r = mid - 1;
}
}
if (target == a[l]) {
cout << (l + 1) << ' ';
}
else {
cout << -1 << ' ';
}
}
return 0;
}
優化版本(200+ms)
#include <cstdio>
#define MAXN 1000010
using namespace std;
int a[MAXN];
inline int read() {
int x = 0;
char c = getchar();
while (c <'0' || c >'9') { c = getchar(); }
while ('0' <= c && c <= '9') {
x = (x << 3) + (x << 1) + (c ^ 0x30);
c = getchar();
}
return x;
}
int main() {
int n = read(), m = read();
for (register int i = 1; i <= n; ++i) {
a[i] = read();
}
while (m--) {
register int target = read();
register int l = 1;
register int r = n;
while (l <= r) {
int mid = (l + r) >> 1;
if (a[mid] < target) {
l = mid + 1;
}
else {
r = mid - 1;
}
}
if (target == a[l]) {
printf("%d ", l);
}
else {
printf("-1 ");
}
}
return 0;
}