w9095
2024-11-17 09:47:59
CF2031D Penchick and Desert Rabbit
赛时 A,B,C 共计吃了
考虑分析每一个位置的性质,不难发现最后一个位置一定能跳到最大值的位置。
接下来,我们考虑第
我们不妨推广一下。如果已知
这样一想,动态规划的思路就清晰了。预处理前缀最大值与后缀最小值,即可做到
#include <bits/stdc++.h>
using namespace std;
long long t,n,a[600000],mx[600000],mi[600000],f[600000];
int main()
{
scanf("%lld",&t);
while(t--)
{
scanf("%lld",&n);
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
mx[0]=0,mi[n+1]=1e18;
for(int i=1;i<=n;i++)mx[i]=max(mx[i-1],a[i]);
for(int i=n;i>=1;i--)mi[i]=min(mi[i+1],a[i]);
f[n]=mx[n];
for(int i=n-1;i>=1;i--)
if(mx[i]>mi[i+1])f[i]=f[i+1];
else f[i]=mx[i];
for(int i=1;i<=n;i++)printf("%lld ",f[i]);
printf("\n");
}
return 0;
}