基础课学习笔记(汇总){:target=”_blank”}
#include <iostream>
using namespace std;
const int N = 100010;
int n, m, temp, a[N];
int main() {
cin >> n >> m;
for (int i = 0; i < n; i++) cin >> a[i];
while (m--) {
// temp 为要查找的值
cin >> temp;
// 定义边界
int l = 0, r = n - 1;
while (l < r) {
// 做法第 1 步: A: 找中间值
int mid = l + r >> 1;
// 做法第 1 步: B: 判断
if (a[mid] >= temp) r = mid;
else l = mid + 1;
}
// 如果二分出来的值不等于要找的值,说明不存在
if (a[r] != temp) cout << "-1 -1" << endl;
else {
// 输出左边界
cout << r << " ";
l = 0, r = n - 1;
while (l < r) {
// 做法第 2 步: A: 找中间值
int mid = l + r + 1 >> 1;
// 做法第 2 步: B: 判断
if (a[mid] <= temp) l = mid;
else r = mid - 1;
}
cout << r << endl;
}
}
return 0;
}
思路很清晰,一看就明白了,谢谢大佬
谢谢大佬
真的牛,看懂了
orz
%%%%%%%%%%%%%
为什么两次二分法用的不一样啊,由什么决定的呢
nbnb
%%%
orz
nbnb可以可以这个真的可以,很佩服作者,直接关注
有什么办法把大佬收藏到ac桌面每日点进来看么
不了解,可以问问y总