与上题相似,同为二分,在二分后在l点向左向右寻找区间[a,b]即可
代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N=100005;
int p[N];
int a,b;
int search(int l,int r,int x)
{
while(l<r)
{
int m=(l+r)/2;
if(p[m]<x)
{
l=m+1;
}
else
{
r=m;
}
}
if(p[l]==x){
a=l;b=l;
while(p[a-1]==x)a--;
while(p[b+1]==x)b++;
return 1;
}
else return 0;
}
int main(){
int n,q,x;
cin>>n;
cin>>q;
for(int i=0;i<n;i++)
cin>>p[i];
while(q--)
{
cin>>x;
if(search(0,n-1,x))
cout<<a<<" "<<b<<endl;
else cout<<"-1 -1"<<endl;
}
return 0;
}