为什么这个可以过啊
查看原帖
为什么这个可以过啊
722313
Whiking楼主2023/2/11 11:19

rt 正解应该是dp+单调队列

但是我这个贪心过了 还是最优解 我不理解

还有这个复杂度很玄学 不知道是啥 感觉可以被卡

#include<bits/stdc++.h>
#define ll long long
#define inf 1e9
#define ls k*2
#define rs k*2+1
using namespace std;
const int asd=1e6+121;
int n,q,k;
int a[asd],dp[asd],val[asd];
void tanxin(){
	int ans=0;
	for(int i=1;i<=n;){
		if(i+k>=n){
			if(val[i]>=val[n])
				ans++;
			cout<<ans<<endl;
			return;
		}
		int id=0,mi=inf;
		for(int j=i+k;j>=i+1;j--){
			if(val[j]>val[i]&&val[j]<mi){
				id=j;
				mi=val[j];
			}
		}
		if(mi==inf){
			int ma=inf;
			for(int j=i+k;j>=i+1;j--)
				if(val[j]<ma){
					ma=val[j];
					id=j;
				}
			ans++,i=id;
		}
		else
			i=id;
	}
}

int main(){
	cin>>n;
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	for(int i=1,j=n;i<=n,j>=1;i++,j--)
		val[i]=a[j];
	cin>>q;
	while(q--){
		cin>>k;
		tanxin();
	}
	return 0;
}
2023/2/11 11:19
加载中...