最后一个点TLE,求教
查看原帖
最后一个点TLE,求教
460093
Ben3493楼主2021/5/29 22:20
#include<iostream>
#include<cstdio>
using namespace std;
int a[1000000],b[100000];
int find(int a[],int n,int goal)
{
	int min=0,max=n-1;
	if(a[0]==goal) return 1;
	if(a[n-1]==goal){
		int p=n-1;
			while(a[p]==a[p-1])
				p--;
			return p+1;
	}
	do{
		if(a[(min+max)/2]!=goal)
			goal>a[(min+max)/2]?min=(min+max)/2:max=(min+max)/2;
		else{
			int p=(min+max)/2;
			while(a[p]==a[p-1])
				p--;
			return p+1;
		}	
	}while(max-min>1);
	return -1;
}
int read() {
    int x=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
    while(c>='0'&&c<='9') x=x*10+c-'0',c=getchar();
    return x*f;
}
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		a[i]=read();
	for(int i=0;i<m;i++)
		b[i]=read();
	for(int i=0;i<m;i++)
		cout<<find(a,n,b[i])<<" ";
	return 0;
}

感觉不是死循环的问题。。

2021/5/29 22:20
加载中...