84分求助,第一个点tle
查看原帖
84分求助,第一个点tle
192407
易安居士楼主2024/1/25 12:27
#include<bits/stdc++.h>
using namespace std;
int n,a[100000001],m,item;
int confirm(int target,int low,int high)
{
	int mid=(low+high)/2;
	if(target>a[mid])return confirm(target,mid+1,high);
	else if(target<a[mid])return confirm(target,low,mid-1);
	else if(high==low)return high;
	else return confirm(target,low,mid);
}
int halfind(int target,int low,int high)
{
	int mid=(low+high)/2;
	if(low>high)return -1;
	else if(a[mid]<target){
		low=mid+1;
		return halfind(target,low,high);
	}
	else if(a[mid]>target){
		high=mid-1;
		return halfind(target,low,high);
	}
	else {
		if(a[mid]==a[mid-1])return confirm(target,low,mid-1);
		else return mid;
	}
}

int main()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i];
	for(int i=1;i<=m;i++)
	{
		cin>>item;
		cout<<halfind(item,1,n)<<" ";
	}
	return 0;
 } 

代码如上

2024/1/25 12:27
加载中...