为什么我搜索过了,还是dfs
查看原帖
为什么我搜索过了,还是dfs
705729
count_year楼主2024/4/19 20:08

代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,x,a[1000001],b[1000001];
void dfs(int k,long long cnt){
	if(k+x>=n){
		if(a[k]<=a[n]){
			b[x]=cnt+1;
			printf("%lld\n",cnt+1);
			return;
		}
		b[x]=cnt;
		printf("%lld\n",cnt);
		return;
	}
	long long maxi=0,maxxi=0;
	bool flag=0;
	for(int i=k+1;i<=k+x;i++){
		if(a[i]>=a[maxi]){
			maxi=i;
		}
		if(a[i]<a[k]){
			flag=1;
		}else{
			continue;
		}
		if(a[i]>=a[maxxi]){
			maxxi=i;
		}
	}
	if(!flag){
		dfs(maxi,cnt+1);
		return;
	}
	dfs(maxxi,cnt);
	return;
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
		scanf("%d",&a[i]);
		b[i]=-1;
	}
	scanf("%d",&m);
	for(int i=1;i<=m;i++){
		scanf("%d",&x);
		if(b[x]!=-1){
			printf("%d\n",b[x]);
			continue;
		}
		dfs(1,0);
	}
	return 0;
}
2024/4/19 20:08
加载中...