考虑一个点作为最小值的区间$[L[i], R[i]]$

那么这个区间的所有含$i$的子区间最小值都是$v[i]$

因此,用单调栈求出$L[i], R[i]$后,对$R[i] - L[i] + 1$这个长度打一个$v[i]$的标记

之后,统计后缀最大值就能得出答案

注:不加输出优化会$T$

复杂度$O(n)$,暂居$rk1$

#include <cstdio>
#include <iostream>
using namespace std; extern inline char gc() {
static char RR[], *S = RR + , *T = RR + ;
if(S == T) fread(RR, , , stdin), S = RR;
return *S ++;
}
inline int read() {
int p = , w = ; char c = gc();
while(c > '' || c < '') { if(c == '-') w = -; p = p * + c - ''; c = gc(); }
while(c >= '' && c <= '') p = p * + c - '', c = gc();
return p * w;
} int wr[], rw;
#define pc(o) *O ++ = o
char WR[], *O = WR;
inline void write(int x) {
if(!x) pc('');
if(x < ) x = -x, pc('-');
while(x) wr[++ rw] = x % , x /= ;
while(rw) pc(wr[rw --] + ''); pc(' ');
} #define ri register int
#define sid 200050 int n, st[sid], top;
int v[sid], L[sid], R[sid], ans[sid]; int main() {
n = read();
for(ri i = ; i <= n; i ++) v[i] = read(); st[top = ] = ; v[] = ;
for(ri i = ; i <= n; i ++) {
while(top && v[st[top]] >= v[i]) top --;
L[i] = st[top] + ; st[++ top] = i;
} st[top = ] = n + ; v[n + ] = ;
for(ri i = n; i >= ; i --) {
while(top && v[st[top]] >= v[i]) top --;
R[i] = st[top] - ; st[++ top] = i;
} for(ri i = ; i <= n; i ++) {
int len = R[i] - L[i] + ;
ans[len] = max(ans[len], v[i]);
}
for(ri i = n; i >= ; i --) ans[i] = max(ans[i], ans[i + ]);
for(ri i = ; i <= n; i ++) write(ans[i]);
fwrite(WR, , O - WR, stdout);
return ;
}

最新文章

  1. Ubuntu 14.04 安装 JDK 8,ubuntu14.04
  2. 转 BHO API HOOK Wininet基于IE编程的一些资料
  3. MVC WEB安全——XSS攻击防御
  4. 如何用JS获取ASP.net中的textbox的值 js获不到text值
  5. How Tomcat Works(五)
  6. nyoj-257 郁闷的C小加(一) 前缀表达式变后缀
  7. 用git difff 生成补丁
  8. Android 物理按键
  9. 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览
  10. 深入浅出数据结构C语言版(3)——递归简论
  11. 8.C++-类的关键字
  12. css-tips
  13. mysql 高版本only_full_group_by 错误
  14. Kaldi的delta特征
  15. spring集成jwt验证方式,token验证
  16. spring-mybatis代码生成插件,与实例展示
  17. 编译Spring源码
  18. Fiddler设置抓取https请求
  19. Hadoop YARN简介
  20. 都铎王朝第一至四季/全集The Tudors迅雷下载

热门文章

  1. Map集合的两种取出方式
  2. js面向对象的几种常见写法
  3. python3学习笔记.2.基础
  4. Coursera在线学习---第一节.梯度下降法与正规方程法求解模型参数比较
  5. Java八种基本类型
  6. 338.Counting Bits---位运算---《剑指offer》32
  7. 谷歌PageRank算法
  8. Metro应用Json数据处理
  9. HTTPS握手过程
  10. Linux内核的三种调度策略