这题不能用倍增吗?
查看原帖
这题不能用倍增吗?
616733
Lysea楼主2023/7/6 15:52
#include<bits/stdc++.h>
#define N 1000005
using namespace std;
int n,m,k,l,r,t,a[N];
signed main(){
	scanf("%d%d",&n,&m);
	memset(a,-1,sizeof(a));
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	while(m--){
		scanf("%d",&k);
		l=r=1,t=n;
		while(r){
			if(a[l+r]<=k) l+=r,r=min(r<<1,t-l);
			else t=l+r-1,r>>=1;
		}
		while(a[l-1]==k) l--;
		if(a[l]==k) printf("%d ",l);
		else printf("-1 ");
	}
    return 0;
}

总是T掉第6个点。

是因为要查找的数都比较偏后吗?

2023/7/6 15:52
加载中...