洛谷 P2249 【深基13.例1】查找

P2249 【深基13.例1】查找

常規版本(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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章