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相关推荐

  1. 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. 思路: 注意到题目中保证了每个孩子至多收到 ...

  2. 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],他们总共花费 ...

  3. Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解(每日训练 Day.16 )

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Codeforces Round #696 (Div. 2) (A ~ E)超高质量题解 比赛链接:h ...

  4. Codeforces Round #694 (Div. 1 + Div2)(A ~ H,8题全,超高质量题解)【每日亿题】2021/2/1、2/2

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 [每日亿题]Codeforces Round #694 (Div. 1 + Div2)(A ~ ...

  5. Codeforces Round #504 E. Down or Right

    Codeforces Round #504 E. Down or Right 题目描述:交互题. 有一个\(n \times n\)的方阵,有一些格子是障碍,从\((1, 1)\)出发,只能向右向下走 ...

  6. 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)的子 ...

  7. 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 ...

  8. Codeforces Round #703 (Div. 2)

    Codeforces Round #703 (Div. 2) 题号 题目 知识点 A Shifting Stacks 思维 B Eastern Exhibition 思维 C1 Guessing th ...

  9. Codeforces Round #708 (Div. 2)

    Codeforces Round #708 (Div. 2) 题号 题目 知识点 A Meximization 思维 B M-arrays 思维 C1 k-LCM (easy version) 构造 ...

  10. Codeforces Round #497 (Div. 1)

    Codeforces Round #497 (Div. 1) A. Reorder the Array 先满足数值较小的位置,每次找恰好大于这个值的一个值即可. #include <bits/s ...

最新文章

  1. CAB归档文件提取工具cabextract
  2. 启明云端分享| RK3568核心板到底有哪些吸引眼球的地方呢
  3. 共享经济模式下的边缘计算——PPIO边缘云 laaS技术实践分享
  4. 机器学习(三十二)——t-SNE, Adaboost
  5. P1344-[USACO4.4]追查坏牛奶Pollutant Control【网络流,最小割】
  6. 面试官:你说说互斥锁、自旋锁、读写锁、悲观锁、乐观锁的应用场景?
  7. pytorch学习笔记(十二):权重衰减
  8. #CSP 201912-2 回收站选址(C语言)(100分)
  9. centos7 查看oracle运行日志_Linux(CentOS7)部署系列---常规应用部署方案
  10. 手把手图文并茂教你用Android Studio编译FFmpeg库并移植
  11. 排序算法之冒泡排序(图解)
  12. CloudMounter——将大容量网盘服务巧妙地挂载到系统文件管理器中
  13. sdut oj 2738 小鑫の日常系列故事(七)——小纸条
  14. android 车载安富蓝牙电话开发,Android平台BLE低功耗蓝牙开发
  15. pppoe协议和pppd源码分析
  16. Scrapy豆瓣爬虫 爬取用户以及用户关注关系
  17. 一文详解:为什么隐私智能合约是Web3的未来
  18. oracle 抽样_oracle优化手段--统计信息导出和抽样提取数据
  19. 响应式网页设计教程:展示响应式设计的基本原理
  20. mac-lol.tk syjc.html,苹果 MacBook Air笔记本一键u盘装系统win7教程

热门文章

  1. 信息系统安全 总结提纲
  2. 立秋后注意脚部保暖 试试量身定制合脚鞋
  3. oracle热备是什么意思,Oracle冷备和热备脚本
  4. 【FFmpeg】使用 ffmpeg 软件让视频旋转适当角度(亲测有效)
  5. el-descriptions
  6. 解决Promise.all一个被rejected,整个都被rejected的缺陷
  7. 学海无涯!我总结了所有面试题,含答案解析
  8. 计算机四分位数公式,上四分位数(上下四分位数计算公式)
  9. 小心,Android木马工具SpyNote免费啦!远程监听就是这么简单
  10. 述职答辩提问环节一般可以问些什么_述职被高频问到的15问