链接:
P2249 【深基13.例1】查找 - 洛谷
题目
思路
没啥好说的,就是二分的模板要熟练掌握;详细参考代码随想录
本道题要注意的就是不能直接套模板,因为有重复元素,所以要单独处理一下边界。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int q[N];
int bsearch(int l, int r, int x) {
while (l < r) {
int mid = l + r >> 1;
if (q[mid] >= x) {
r = mid;
} else {
l = mid + 1;
}
}
if (q[l] == x) return l;
else return -1;
}
int main() {
// ios::sync_with_stdio(false);
// cin.tie(nullptr);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; ++i) {
cin >> q[i];
}
while (m--) {
int x;
cin >> x;
cout << bsearch(1, n, x) << ' ';
}
return 0;
}
说明:本次回归将会按题号顺序重新带来本轮自己刷的算法题。
几句话送给往后的自己,希望一切顺利吧........
“人生总有很多左右为难的事,如果你在做与不做之间纠结,那么不要反复推演,立即去做,鲁莽的人反而更容易赢。
因为如果不做,这件事就永远停留在脑中假想,由于没有真实的反馈,诱惑就会越来越大,最终肯定会让你后悔。而去做,就进入了一个尝试、反馈、修正、推进的循环,最终至少有一半的概率能做成,不后悔。“
“三四月你只管种花,八九月自会有答案。”