Codeforces Round #622 (Div. 2) C. Skyscrapers
时间:2021-08-06
本文章向大家介绍Codeforces Round #622 (Div. 2) C. Skyscrapers,主要包括Codeforces Round #622 (Div. 2) C. Skyscrapers使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
单调栈维护下每个位置向前向后单调的最大和
const int maxn = 5e5 + 7;
#define int long long
int n, t, m;
int a[maxn], pre[maxn], suf[maxn];
stack<pair<int, int>> st;
void solve() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n; i++) {
if (st.size() == 0 || a[i] > st.top().first) {
st.push({a[i], 1});
pre[i] = pre[i - 1] + a[i];
} else {
pair<int, int> nex = {a[i], 1};
pre[i] = pre[i - 1] + a[i];
while (st.size() && st.top().first > a[i]) {
auto tp = st.top();
st.pop();
pre[i] -= (tp.first - a[i]) * tp.second;
nex.second += tp.second;
}
st.push(nex);
}
}
while (st.size()) st.pop();
for (int i = n; i >= 1; i--) {
if (st.size() == 0 || a[i] > st.top().first) {
st.push({a[i], 1});
suf[i] = suf[i + 1] + a[i];
} else {
pair<int, int> nex = {a[i], 1};
suf[i] = suf[i + 1] + a[i];
while (st.size() && st.top().first > a[i]) {
auto tp = st.top();
st.pop();
suf[i] -= (tp.first - a[i]) * tp.second;
nex.second += tp.second;
}
st.push(nex);
}
}
int ans = 0, pl = 0;
for (int i = 1; i <= n; i++)
if (suf[i] + pre[i] - a[i] > ans)
ans = suf[i] + pre[i] - a[i], pl = i;
for (int i = pl + 1; i <= n; i++)
a[i] = min(a[i], a[i - 1]);
for (int i = pl - 1; i >= 1; --i)
a[i] = min(a[i], a[i + 1]);
for (int i = 1; i <= n; i++)
cout << a[i] << " ";
}
我看见 你
原文地址:https://www.cnblogs.com/maymi/p/15110410.html
- Codeforces Round #301 (Div. 2)(A,【模拟】B,【贪心构造】C,【DFS】)
- 【专知-PyTorch手把手深度学习教程06】NLP-Word Embedding快速理解与PyTorch实现: 图文+代码
- [linux][memory]memcmp几种实现和性能对比
- 蒙特卡洛算法及其实现
- 【专知-PyTorch手把手深度学习教程05】Dropout快速理解与PyTorch实现: 图文+代码
- 【专知-PyTorch手把手深度学习教程04】GAN快速理解与PyTorch实现: 图文+代码
- 2017年中国大学生程序设计竞赛-中南地区赛暨第八届湘潭市大学生计算机程序设计大赛题解&源码(A.高斯消元,D,模拟,E,前缀和,F,LCS,H,Prim算法,I,胡搞,J,树状数组)
- 【专知中秋呈献-PyTorch手把手深度学习教程03】LSTM快速理解与PyTorch实现: 图文+代码
- BZOJ 3098: Hash Killer II(新生必做的水题)
- [接口测试 - 基础篇] 04 无法绕过的json解析
- 【专知-PyTorch手把手深度学习教程02】CNN快速理解与PyTorch实现: 图文+代码
- [接口测试 - 基础篇] 03 unittest测试框架了解多少才够?
- 关关的刷题日记09——Leetcode 80. Remove Duplicates from Sorted Array II
- [linux][kernel]dump kmsg到文件系统中
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 3.QOpenGLWidget-通过着色器来渲染渐变三角形
- 特斯拉大半夜「见鬼」!空无一人的路上,它却看见「幽灵」秒刹车
- .NET 异步详解
- 他被导师半夜敲门叫醒:你得诺贝尔奖了!还曾为5G频谱拍卖设计方案,担任谷歌IPO咨询顾问
- C#实现——十大排序算法之选择排序
- CSS高级技巧 CSS用户界面样式
- 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
- Sentinel断路器与熔断降级【源码笔记】
- 数据分析、数据挖掘基础:描述统计学基础知识分享!
- 前端开发必会的HTML/CSS硬知识
- 前端开发必会的HTML/CSS硬知识 (二)
- 移动web开发之rem布局
- less 基础
- 【淘宝】实现一个函数用来解析 URL 的 querystring
- 移动端WEB开发之响应式布局