成仙之路−> 算法基础课题解
完整代码
#include<bits/stdc++.h>
using namespace std;
const int N = 100010;
int n,m;
int a[N];
int SL(int q[],int l,int r,int x) //在q数组中,从l~r查找x的左边界
{
while(l<r)
{
int mid=l+r>>1;
if(q[mid]>=x) r=mid;
else l=mid+1;
}
return l;
}
int SR(int q[],int l,int r,int x) //在q数组中,从l~r查找x的右边界
{
while(l<r)
{
int mid=l+r+1>>1;
if(q[mid]<=x) l=mid;
else r=mid-1;
}
return l;
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++) cin>>a[i];
while(m--)
{
int x;
cin>>x;
if(a[SL(a,0,n-1,x)]!=x) cout<<"-1 -1"<<endl;
else cout<<SL(a,0,n-1,x)<<' '<<SR(a,0,n-1,x)<<endl;
}
return 0;
}
写的很看着很简单,简洁,但是我不知道怎么判断从那边开始查找,比如你写的这两个函数
膜拜大佬
tql
清晰
m的作用是啥
m就是表示有m个询问啊
/好的