#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
int lst[maxn],nxt[maxn];
int a[maxn],s[maxn];
int n;
int tp;
int ans[maxn];
void getPos(int i)
{
lst[i]=i;nxt[i]=n;
while(tp!=0 && a[s[tp-1]]>=a[i])//tp初值为0,注意是>=
nxt[s[--tp]]=i-1;
s[tp++]=i;
if(tp==1) lst[i]=1;
else lst[i]=s[tp-2]+1;
}
int main()
{
tp=0;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
getPos(i);//边输入边插入
}
for(int i=1;i<=n;i++)
{
int len=nxt[i]-lst[i]+1;
ans[len]=max(ans[len],a[i]);
}
for(int i=n-1;i>0;i--)
{
ans[i]=max(ans[i],ans[i+1]);
}
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
}
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int maxn=2e5+10;
int lst[maxn],nxt[maxn];
int a[maxn],s[maxn];
int n;
int tp;
int ans[maxn];
void getPos(int i)
{
lst[i]=i;nxt[i]=n;
while(tp!=0 && a[s[tp-1]]>=a[i])//tp初值为0,注意是>=
nxt[s[--tp]]=i-1;
s[tp++]=i;
if(tp==1) lst[i]=1;
else lst[i]=s[tp-2]+1;
}
int main()
{
tp=0;
cin>>n;
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
getPos(i);//边输入边插入
}
for(int i=1;i<=n;i++)
{
int len=nxt[i]-lst[i]+1;
ans[len]=max(ans[len],a[i]);
}
for(int i=n-1;i>0;i--)
{
ans[i]=max(ans[i],ans[i+1]);
}
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
}