记录编号 378046 评测结果 AAAAAAAAAA
题目名称 [HZOI 2016]从零开始的序列 最终得分 100
用户昵称 GravatarYouSiki 是否通过 通过
代码语言 C++ 运行时间 0.085 s
提交时间 2017-03-02 20:43:46 内存使用 6.65 MiB
显示代码纯文本
  1. #include<bits/stdc++.h>
  2. #define siz (1<<20)
  3. #define frd fread(hd=buf,1,siz,stdin)
  4. #define gtc (hd==tl?(frd,*hd++):*hd++)
  5. char buf[siz],*hd=buf+siz,*tl=buf+siz;
  6. __inline void scan(int &r){
  7. r=0;static int c,f;
  8. for(c=gtc,f=0;c<48;c=gtc)if(c=='-')f=1;
  9. for(;c>47;c=gtc)r=r*10+c-48;if(f)r=-r;
  10. }
  11. #define max(a,b) (a>b?a:b)
  12. #define min(a,b) (a<b?a:b)
  13. #define rep(i,x,y) for(register int i=x;i<=y;++i)
  14. #define per(i,x,y) for(register int i=x;i>=y;--i)
  15. #define mxn 200005
  16. int n,a[mxn],b[mxn],f[mxn],s[mxn],v[mxn],g[mxn];
  17. __inline bool cmp(int i,int j){
  18. return a[i]>a[j];
  19. }
  20. __inline int find(int u){
  21. static int st[mxn],tt;
  22. while(u!=f[u])st[++tt]=u,u=f[u];
  23. while(tt)f[st[tt--]]=u;
  24. return u;
  25. }
  26. __inline void merge(int i,int j){
  27. i=find(i);j=find(j);f[i]=j;s[j]+=s[i];
  28. }
  29. main(){
  30. freopen("sky_seq.in","r",stdin);
  31. freopen("sky_seq.out","w",stdout);
  32. scan(n);
  33. rep(i,1,n)scan(a[i]),f[i]=b[i]=i,s[i]=1,g[i]=-1E9;
  34. std::sort(b+1,b+1+n,cmp);
  35. rep(i,1,n){int t=b[i];v[t]=1;
  36. if(v[t-1])merge(t-1,t);
  37. if(v[t+1])merge(t+1,t);
  38. t=find(t);g[s[t]]=max(g[s[t]],a[b[i]]);
  39. }
  40. per(i,n,1)g[i]=max(g[i+1],g[i]);
  41. rep(i,1,n)printf("%d ",g[i]);puts("");
  42. return fclose(stdout),0;
  43. }