Codeforces Round #622 C2 - Skyscrapers
Codeforces Round #622 C2 - Skyscrapers(单调栈)
题意:
给一个整数nnn以及一个数组mmm。 构建一个数组aaa满足:1≤ai≤mi1≤a_i≤m_i1≤ai≤mi,且不存在这样的情况j<i<k,aj>ai<akj<i<k,a_j>a_i<a_kj<i<k,aj>ai<ak
求数组的和最大的方案。
思路:
我们知道要满足数组的条件,数组必须是一个单峰数组。即我们只需要找到那个数组的峰值的下标即可。
用单调栈维护两个数组:
l[i]l[i]l[i]代表从111到iii 单调不减时最大的前缀和。
r[i]r[i]r[i]代表从iii到nnn 单调不升时最大的后缀和。
那么我们找到l[i]+r[i]−h[i]l[i] + r[i] - h[i]l[i]+r[i]−h[i]的最大值下标就是目标数组的峰值下标,然后输出答案即可。
视频讲解可以参考:WNJXYK 和 卿学姐
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 5e5+10;
ll n, l[maxn], r[maxn], h[maxn];
pair<int, int> s[maxn];
void solve(ll ans[]){int top = 0;ll cur = 0;s[top] = make_pair(0, 0);for (int i = 1; i <= n; i++){while(top && s[top].first > h[i]){cur -= (1ll * s[top].first * (s[top].second - s[top - 1].second));top--;}cur += (1ll * h[i] * (i - s[top].second));s[++top] = make_pair(h[i], i);ans[i] = cur;}
}
int main(){ios_base::sync_with_stdio(0);cin >> n;for (int i = 1; i <= n; i++){cin >> h[i];}solve(l);reverse(h + 1, h + 1 + n);solve(r);reverse(h + 1, h + 1 + n);reverse(r + 1, r + 1 + n);ll ans = r[1], pos = 1;for (int i = 1; i <= n; i++){ll t = l[i] + r[i] - h[i];if(ans < t){ans = t;pos = i;}}ll res[n + 1]; res[pos] = h[pos];for (int i = pos - 1; i >= 1; i--){res[i] = min(res[i + 1], h[i]);}for (int i = pos + 1; i <= n; i++){res[i] = min(res[i - 1], h[i]);}for (int i = 1; i <= n; i++){cout << res[i] << " ";}cout << endl;return 0;
}
Codeforces Round #622 C2 - Skyscrapers相关推荐
- Codeforces Round #622 (Div. 2) D. Happy New Year 状压dp
传送门 文章目录 题意: 思路: 题意: n≤1e5,m≤1e9,k≤8.n\le 1e5,m\le 1e9,k\le 8.n≤1e5,m≤1e9,k≤8. 思路: 注意到题目中保证了每个孩子至多收到 ...
- Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version)
Codeforces Round #568 (Div. 2)C2. Exam in BerSU (hard version) 贪心+暴力 大致题意:N个人考试,每个人花费的时间是a[i],他们总共花费 ...
- Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...
- Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...
- Codeforces Round #504 E. Down or Right
Codeforces Round #504 E. Down or Right 题目描述:交互题. 有一个\(n \times n\)的方阵,有一些格子是障碍,从\((1, 1)\)出发,只能向右向下走 ...
- Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对
传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的串a,ba,ba,b,每次可以同时翻转a,ba,ba,b中任意一段长度为L(1≤L≤n)L(1\le L\le n)L(1≤L≤n)的子 ...
- Codeforces Round #624 (Div. 3) D. Three Integers 数论
传送门 文章目录 题意: 思路: 题意: 给定A,B,CA,B,CA,B,C,找到一个三元组(a,b,c)(a,b,c)(a,b,c),使得aaa是bbb的因子,bbb是ccc的因子,且abs(A−a ...
- Codeforces Round #703 (Div. 2)
Codeforces Round #703 (Div. 2) 题号 题目 知识点 A Shifting Stacks 思维 B Eastern Exhibition 思维 C1 Guessing th ...
- Codeforces Round #708 (Div. 2)
Codeforces Round #708 (Div. 2) 题号 题目 知识点 A Meximization 思维 B M-arrays 思维 C1 k-LCM (easy version) 构造 ...
- Codeforces Round #497 (Div. 1)
Codeforces Round #497 (Div. 1) A. Reorder the Array 先满足数值较小的位置,每次找恰好大于这个值的一个值即可. #include <bits/s ...
最新文章
- CAB归档文件提取工具cabextract
- 启明云端分享| RK3568核心板到底有哪些吸引眼球的地方呢
- 共享经济模式下的边缘计算——PPIO边缘云 laaS技术实践分享
- 机器学习(三十二)——t-SNE, Adaboost
- P1344-[USACO4.4]追查坏牛奶Pollutant Control【网络流,最小割】
- 面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景?
- pytorch学习笔记(十二):权重衰减
- #CSP 201912-2 回收站选址(C语言)(100分)
- centos7 查看oracle运行日志_Linux(CentOS7)部署系列---常规应用部署方案
- 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
- 排序算法之冒泡排序(图解)
- CloudMounter——将大容量网盘服务巧妙地挂载到系统文件管理器中
- sdut oj 2738 小鑫の日常系列故事(七)——小纸条
- android 车载安富蓝牙电话开发,Android平台BLE低功耗蓝牙开发
- pppoe协议和pppd源码分析
- Scrapy豆瓣爬虫 爬取用户以及用户关注关系
- 一文详解:为什么隐私智能合约是Web3的未来
- oracle 抽样_oracle优化手段--统计信息导出和抽样提取数据
- 响应式网页设计教程:展示响应式设计的基本原理
- mac-lol.tk syjc.html,苹果 MacBook Air笔记本一键u盘装系统win7教程
热门文章
- 信息系统安全 总结提纲
- 立秋后注意脚部保暖 试试量身定制合脚鞋
- oracle热备是什么意思,Oracle冷备和热备脚本
- 【FFmpeg】使用 ffmpeg 软件让视频旋转适当角度(亲测有效)
- el-descriptions
- 解决Promise.all一个被rejected,整个都被rejected的缺陷
- 学海无涯!我总结了所有面试题,含答案解析
- 计算机四分位数公式,上四分位数(上下四分位数计算公式)
- 小心,Android木马工具SpyNote免费啦!远程监听就是这么简单
- 述职答辩提问环节一般可以问些什么_述职被高频问到的15问