codeforces 547B. Mike and Feet 单调栈
2024-08-29 00:16:59
用单调栈计算出一个数字, 左边第一个比他小的数字的位置, 右边比第一个他小的数字的位置, 然后len = r[i] - l[i] +1. ans[len] = max(ans[len], a[i])
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+;
int l[maxn], r[maxn], ans[maxn], a[maxn], q[maxn];
int main()
{
int n;
cin>>n;
for(int i = ; i<=n; i++) {
scanf("%d", &a[i]);
}
int i = , st = ;
while(i<=n) {
while(st&&a[q[st-]]>a[i]) {
r[q[st-]] = i-;
st--;
}
q[st++] = i;
i++;
}
while(st) {
r[q[st-]] = n;
st--;
}
i = n;
while(i>=) {
while(st&&a[q[st-]]>a[i]) {
l[q[st-]] = i+;
st--;
}
q[st++] = i;
i--;
}
while(st) {
l[q[st-]] = ;
st--;
}
memset(ans, , sizeof(ans));
for(int i = ; i<=n; i++) {
int len = r[i]-l[i]+;
if(ans[len]<a[i]) {
ans[len] = a[i];
}
}
for(i = n; i>=; i--) {
if(ans[i]>=ans[i-])
ans[i-] = ans[i];
}
for(int i = ; i<=n; i++) {
printf("%d ", ans[i]);
}
}
最新文章
- Cygwin/babun install telnet
- 35.两链表的第一个公共结点[Find the first common node of two linked list]
- VPN安装后报错:Reason442 &; Error56
- C#对HTML文档的解析
- 使用Jaxb2进行xml与bean的转义时Date的format设置
- Map:containsKey、containsValue 获取Map集合的键值的 值
- 第三章--Win32程序的执行单元(部分概念及代码讲解)(上 -- 多线程)
- UVA 11573 Ocean Currents --BFS+优先队列
- Code Understanding Step by Step - We Need a Task
- JPA事务回滚配置
- python 格式化日期
- JS,JQuery各种获取屏幕的宽度和高度
- HDU 5281 Senior&;#39;s Gun
- C语言之函数
- 关于";模块计算机类型与目标计算机类型冲突";的解决
- 第三章Hibernate关联映射
- springboot集成jpa
- STM32标准库GPIO操作
- C# 特性学习笔记
- ElasticSearch6.2.3安装Head插件