发现一个二分讲的十分清楚的视频,up的理解思路也很清晰,让我对二分也有了新的理解,希望下次写二分不用再调试了 T_T
https://www.bilibili.com/video/BV1d54y1q7k7?from=search&seid=14378360076371462119
#include<bits/stdc++.h>
using namespace std;
#define PII pair<int, int>
#define x first
#define y second
const int inf = 0x3f3f3f3f;
// #define int long long
const int N = 100010;
int a[N];
void sol() {
int n,q;
cin >> n >> q;
for (int i=0; i<n; i++) cin >> a[i];
while (q--){
int k;
cin >> k;
int l = -1;
int r = n;
while (l+1 != r){
int mid = l + r >> 1;
if(a[mid] >= k) r = mid;
else l = mid;
}
int L = r;
l = -1;
r = n;
while(l+1 != r){
int mid = l + r >> 1;
if(a[mid] <= k){
l = mid;
}else{
r = mid;
}
}
int R = l;
if(L>R) {
cout << -1 << ' ' << -1 << '\n';
continue;
}
cout << L << ' ' << R << '\n';
}
}
int main(){
// ios::sync_with_stdio(false);
// cin.tie(nullptr);
int T_T=1;
// cin >> T_T;
while (T_T--) sol();
return 0;
}