记录编号 |
378046 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HZOI 2016]从零开始的序列 |
最终得分 |
100 |
用户昵称 |
YouSiki |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.085 s |
提交时间 |
2017-03-02 20:43:46 |
内存使用 |
6.65 MiB |
显示代码纯文本
#include<bits/stdc++.h>
#define siz (1<<20)
#define frd fread(hd=buf,1,siz,stdin)
#define gtc (hd==tl?(frd,*hd++):*hd++)
char buf[siz],*hd=buf+siz,*tl=buf+siz;
__inline void scan(int &r){
r=0;static int c,f;
for(c=gtc,f=0;c<48;c=gtc)if(c=='-')f=1;
for(;c>47;c=gtc)r=r*10+c-48;if(f)r=-r;
}
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define rep(i,x,y) for(register int i=x;i<=y;++i)
#define per(i,x,y) for(register int i=x;i>=y;--i)
#define mxn 200005
int n,a[mxn],b[mxn],f[mxn],s[mxn],v[mxn],g[mxn];
__inline bool cmp(int i,int j){
return a[i]>a[j];
}
__inline int find(int u){
static int st[mxn],tt;
while(u!=f[u])st[++tt]=u,u=f[u];
while(tt)f[st[tt--]]=u;
return u;
}
__inline void merge(int i,int j){
i=find(i);j=find(j);f[i]=j;s[j]+=s[i];
}
main(){
freopen("sky_seq.in","r",stdin);
freopen("sky_seq.out","w",stdout);
scan(n);
rep(i,1,n)scan(a[i]),f[i]=b[i]=i,s[i]=1,g[i]=-1E9;
std::sort(b+1,b+1+n,cmp);
rep(i,1,n){int t=b[i];v[t]=1;
if(v[t-1])merge(t-1,t);
if(v[t+1])merge(t+1,t);
t=find(t);g[s[t]]=max(g[s[t]],a[b[i]]);
}
per(i,n,1)g[i]=max(g[i+1],g[i]);
rep(i,1,n)printf("%d ",g[i]);puts("");
return fclose(stdout),0;
}