80份最后一个点TLE怎么回事?
查看原帖
80份最后一个点TLE怎么回事?
625711
lanmengfei楼主2023/6/1 21:39

贴代码:

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+5;
int MAXN=-1,n,a[maxn],c[maxn],h=2,m,k,cx=1000000000+5;
bool flag=0,flagg=0;
void find_(int l,int r,int a[],int k){
	if(l>r){
		return;
	}
	int id=(l+r)/2,mid=a[id];
	if(k!=mid and flagg==1){
		return;
	}
	if(k<mid){
		find_(l,id-1,a,k);
	} 
	if(k==mid){
		flag=1;
		flagg=1;
		cx=min(cx,id);
		find_(l,r-1,a,k);
	}
	if(k>mid){
		find_(id+1,r,a,k); 
	}
	return;
} 
int main(){
	scanf("%d%d",&n,&m);
	scanf("%d",&a[1]);
	c[1]=a[1];
	for(int i=2;i<=n;i++){
		scanf("%d",&a[i]);
		MAXN=max(MAXN,a[i]);
		if(a[i]!=a[i-1]){
			c[h]=a[i];
			h++;
		}
	}--h;
	for(int i=1;i<=m;i++){
		cin>>k;
		flag=0,flagg=0;
		cx=MAXN+1;
		find_(1,n,a,k);
		if(flag==1){
			cout<<cx<<" ";
		}
		else{
			cout<<-1<<" ";
		}
	}
	return 0;
} 

最后一个点TLE80分求助!

2023/6/1 21:39
加载中...