我写了两版代码,一版MLE一版RE……
改了一天了,还请神犇帮忙指出问题(悬赏gz)
RE code:
#include<bits/stdc++.h>
using namespace std;
int a[1000010],n,q,m;
int p;
void find(int l,int r,int x) {
while(l<r) {
int mid=(l+r)/2;
if(a[mid]<=x) {
l=mid;
find(l,r,x);
} else {
r=mid;
find(l,r,x);
}
}
if(a[l]!=x)p=-1;
else p=l;
}
int main() {
scanf("%d %d",&n,&m);
for(int i=1; i<=n; i++)scanf("%d ",&a[i]);
for(int i=1; i<=m; i++) {
scanf("%d %d",&q);
find(1,n+1,q);
printf("%d ",p);
}
return 0;
}
MLE code:
#include<bits/stdc++.h>
using namespace std;
int a[1000010],n,q,m;
int read() {
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
void write(int x) {
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10 +'0');
}
int find(int l,int r,int x) {
int mid;
while(l<r) {
mid=(l+r)/2;
if(a[mid]<=x) {
l=mid;
find(l,r,x);
} else {
r=mid;
find(l,r,x);
}
}
if(a[l]!=x)return -1;
else return l;
}
int main() {
n=read();
m=read();
for(int i=1; i<=n; i++)a[i]=read();
for(int i=1; i<=m; i++)q=read();
for(int i=1; i<=m; i++) {
write(find(1,n,q));
printf(" ");
}
return 0;
}