前几天做的题,当时好像是超时了,这个博客写的超好https://blog.csdn.net/lucky52529/article/details/89155694

用单调站解决问题。

代码是从另外一篇博客来的,谢谢了,贴过来,如果介意的话我就删掉

https://blog.csdn.net/weixin_44164153/article/details/104486676?fps=1&locationNum=2

#include <bits/stdc++.h>
using namespace std;
#define IO std::ios::sync_with_stdio(false)
#define int long long
#define INF 0x3f3f3f3f const int maxn = 5e5+;
int n,a[maxn],l[maxn],r[maxn],res[maxn];
signed main() {
IO;
cin >> n;
for (int i = ; i <= n; i++) cin >> a[i];
vector<int> q;
q.push_back();
for (int i = ; i <= n; i++) {
while (!q.empty() && a[q.back()] >= a[i]) q.pop_back();
int t = q.back();
l[i] = l[t] + a[i] * (i - t);
q.push_back(i);
}
q.clear();
q.push_back(n+);
for (int i = n; i >= ; i--) {
while (!q.empty() && a[q.back()] >= a[i]) q.pop_back();
int t = q.back();
r[i] = r[t] + a[i] * (t - i);
q.push_back(i);
}
int ans = , pos = ;
for (int i = ; i <= n; i++) {
int temp = l[i] + r[i] - a[i];
if (temp > ans) {
ans = temp, pos = i;
}
}
res[pos] = a[pos];
for (int i = pos - ; i >= ; i--) res[i] = min(a[i], res[i + ]);
for (int i = pos + ; i <= n; i++) res[i] = min(a[i], res[i - ]);
for (int i = ; i <= n; i++) cout << res[i] << " ";
cout << endl;
return ;
}

C2 - Skyscrapers (hard version)的更多相关文章

  1. Codeforces Round #622(Div 2)C2. Skyscrapers (hard version)

    题目链接 : C2. Skyscrapers (hard version) 题目描述 : 与上一道题类似,只是数据范围变大, 5e5, 如果用我们原来的方法,铁定是超时的. 考察点 : 单调栈,贪心, ...

  2. Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version)(单调栈,递推)

    Codeforces Round #622 (Div. 2) C2. Skyscrapers (hard version) 题意: 你是一名建筑工程师,现给出 n 幢建筑的预计建设高度,你想建成峰状, ...

  3. Codeforces Round #622 C2.Skyscrapers (hard version)

    This is a harder version of the problem. In this version n≤500000n≤500000 The outskirts of the capit ...

  4. Codeforces Round #622 (Div. 2).C2 - Skyscrapers (hard version)

    第二次写题解,请多多指教! http://codeforces.com/contest/1313/problem/C2 题目链接 不同于简单版本的暴力法,这个数据范围扩充到了五十万.所以考虑用单调栈的 ...

  5. Codeforces Round #622 (Div. 2) C2 - Skyscrapers (hard version) 单调栈

    从左往右扫,找到比第i个小的第一个数字,l[i] = l[last] + (i - last) * m[i],用单调栈O(n)维护这个过程,再从右往左扫,同理可以算出r数组,注意一下long long ...

  6. Codeforces Round #622(Div 2) C1. Skyscrapers (easy version)

    题目链接: C1. Skyscrapers (easy version) 题目描述: 有一行数,使得整个序列满足 先递增在递减(或者只递增,或者只递减) ,每个位置上的数可以改变,但是最大不能超过原来 ...

  7. Codeforces Round #622 (Div. 2) C1. Skyscrapers (easy version)(简单版本暴力)

    This is an easier version of the problem. In this version n≤1000n≤1000 The outskirts of the capital ...

  8. Codeforces Round #622 (Div. 2)C2 Skyscrapers最大"尖"性矩形,思维||分治

    题:https://codeforces.com/contest/1313/problem/C2 题意:给出n个数,分别代表第i个位置所能搭建的最大高度,问以哪一个位置的塔的高度为基准向左的每一个塔都 ...

  9. X - Skyscrapers (hard version) CodeForces - 1313C2

    题目大意:n个高楼,每个楼最高为mi,要求,第i个楼左边和右边不能有同时比它高的楼.让你求最在n个楼总和最高的情况下,每个楼的高度. 题解:用单调栈来做,n个楼的高度要么是单调递减,要么是单调递增,要 ...

随机推荐

  1. 【PAT甲级】1043 Is It a Binary Search Tree (25 分)(判断是否为BST的先序遍历并输出后序遍历)

    题意: 输入一个正整数N(<=1000),接下来输入N个点的序号.如果刚才输入的序列是一颗二叉搜索树或它的镜像(中心翻转180°)的先序遍历,那么输出YES并输出它的后序遍历,否则输出NO. t ...

  2. 阿里云短信接口开发实践(Java

    随着互联网的兴起,各行各业的需求都在不断的增加.随着业务的扩大,企业给用户发送短信验证码的业务,也是如火如荼.在这里,calvin给各位开发者推荐阿里云短信平台.原因有二:1.接入较简单,开发成本低 ...

  3. 使用KVC键值编码

    掌握KVC从不使用setter.getter.点语法开始. ----- 前言 对象的内部状态是由属性进行封装的.访问对象属性的方式平时在开发过程中用得最多的是getter方法和点语法.键值编程KVC也 ...

  4. GUI编程与CLI编程

    作为一名多年的iOS开发人员,多次触发我思酌“GUI编程与CLI编程”各自的优劣,尤其是在当我为界面交互花费大占比时间时,时常怀疑自己的工作性质,我终究还是为互联网工作的码农,而不是让互联网为我所用的 ...

  5. 攻防世界Web进阶-Upload1

    进入题目 题目提示上传文件,准备好一句话木马. 发现只能上传图片文件,那么再准备一个图片的一句话木马.上传. 浏览器开代理,使用burpsuite拦截,修改文件后缀名为php,否则无法连接 使用蚁剑连 ...

  6. PTA的Python练习题(四)

    从 第3章-1 3-1.大于身高的平均值 开始 1. 引入列表的概念 a=list(map(int,input().split())) b=sum(a) c=len(a) d=b/c for i in ...

  7. 去重sort|uniq -d

    #!/bin/bash ############################################################### #Author :Bing # #Create ...

  8. ES5-json对象和字符串互转

    JSON.stringify();和JSON.parse();是在ES5中提出并使用的:JSON.stringify();将一个对象转化为json字符串,JSON.parse();将一个对象转化为对象 ...

  9. 搭建PXE实现自动化安装系统

    一.PXE工作原理 Ø  Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的I ...

  10. 三、linux基础-常用命令man_cd_|_find_ln_>_history

    3通用命令3.1 man命令man pwd      来查看该命令的全部帮助手册备注:命令最终是在内核中执行的,但是内核并无法直接识别,所以先通过shell执行,然后再交给内核执行3.2 cd 命令c ...