蒟蒻80分求调,最后一个TLE。
查看原帖
蒟蒻80分求调,最后一个TLE。
1286047
Doshe楼主2024/8/1 20:12
#include <stdio.h>
#include <iostream>
using namespace std;
const int N=1e6+4;
long long int num[N]={0};

int binsearch(int l,int r,long long int q ){
	if(l>r) return -1;
	int mid=(l+r)/2;
	int k=mid;
	if(q==num[mid]) {
		if(binsearch(l,mid-1,q)!=-1){
			return binsearch(l,mid-1,q);
			mid=k;
		}else{
			mid=k;
			return mid;
		}
	}
	
	if(q>num[mid]){
		return binsearch(mid+1,r,q);
	}else{
		return binsearch(l,mid-1,q);
	}
	return -1;
}



int main(){
	int n,m,i;
	scanf("%d %d",&n,&m);
	for(i=1;i<=n;i++){
		scanf("%lld",&num[i]);
	}
	for(int j=0;j<m;j++){
		long long int q;
		scanf("%lld ",&q);
		printf("%d ",binsearch(1,i,q));
	}
	return 0;
}

大致思路:就是手写了二分,外加了当有多个重复数字时输出第一次出现的位置

2024/8/1 20:12
加载中...