用二分函数while写法AC做出来了,突发奇想尝试用递归调用的二分来做,结果测试点全MLE,求助为什么会这样,以及有什么优化方法吗?
以下是代码:
#include<bits/stdc++.h>
using namespace std;
struct node{
int no,num;
}p[100005];
int n,q,tmp;
bool cmp(node p1,node p2){
return p1.num<p2.num;
}
void find(int l,int r,int x){
int mid=l+(r-l)/2;
if(l>=x){
if(p[l].num==x) {cout<<p[l].no<<endl;return;}
else {cout<<0<<endl;return;}
}
if(p[mid].num>=x) find(l,mid,x);
else find(mid+1,r,x);
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>p[i].num;
p[i].no=i;
}
sort(p+1,p+1+n,cmp);
cin>>q;
for(int i=1;i<=q;i++){
cin>>tmp;
find(1,n,tmp);
}
return 0;
}