为什么第一个会超时而第二个不会?
查看原帖
为什么第一个会超时而第二个不会?
1505045
AlbertX楼主2025/8/29 10:12

代码1:

#include<iostream>
using namespace std;

int n,m,a[1000010];

int find(int x){
	int l=1,r=n+1;
	while(l<r){
		int mid=l+(r-1)/2;
		if(a[mid]>=x) r=mid;
		else l=mid+1;
	}
	if(a[l]==x) return l;
	return -1;
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=0;i<m;i++){
		int x;
		scanf("%d",&x);
		printf("%d ",find(x));
	}
	return 0;
}

代码2:

#include<cstdio>
using namespace std;

int n,m,a[1000010];

int find(int x){
	int l=1,r=n;
	while(l<r){
		int mid=l+(r-l)/2;
		if(a[mid]>=x) r=mid;
		else l=mid+1;
	}
	if(a[l]==x) return l;
	return -1; 
}

int main(){
	scanf("%d %d",&n,&m);
	for(int i=1;i<=n;i++)
	    scanf("%d",&a[i]);
	for(int i=0;i<m;i++){
		int x;
		scanf("%d ",&x);
		int ans=find(x);
		printf("%d ",ans); 
	}
	return 0;
}

Why?

2025/8/29 10:12
加载中...