记录编号 378046 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016]从零开始的序列 最终得分 100
用户昵称 GravatarYouSiki 是否通过 通过
代码语言 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;
}