第十六届蓝桥杯康复训练--5
题目链接: 789. 数的范围 - AcWing题库
思路:二分找数的左右端点
代码:
#include<bits/stdc++.h>
using namespace std;
#define N 100010
int n,m;
int a[N];
int find1(int u){
int l=1,r=n;
while(l<=r){
int mid=l+r>>1;
if(a[mid]<u)l=mid+1;
else r=mid-1;
}
if(a[l]==u)return l-1;
return -1;
}
int find2(int u){
int l=1,r=n;
while(l<=r){
int mid=l+r>>1;
if(a[mid]<=u)l=mid+1;
else r=mid-1;
}
if(a[r]==u)return r-1;
return -1;
}
void solve(){
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
while(m--){
int u;
cin>>u;
cout<<find1(u)<<" "<<find2(u)<<endl;
}
}
int main(){
int t=1;
// cin>>t;
while(t--){
solve();
}
return 0;
}