首页 > TAG信息列表 > Skyscrapers
Codeforces Round #622 (Div. 2).C2 - Skyscrapers (hard version)
第二次写题解,请多多指教! http://codeforces.com/contest/1313/problem/C2 题目链接 不同于简单版本的暴力法,这个数据范围扩充到了五十万。所以考虑用单调栈的做法; 1.首先顺序逆序扫一遍,记录下每个点左边的最大高度和以及右边的最大高度和 存在l[i] r[i] 两个数组中; 2.第二步从前C2 - Skyscrapers (hard version)
前几天做的题,当时好像是超时了,这个博客写的超好https://blog.csdn.net/lucky52529/article/details/89155694 用单调站解决问题。 代码是从另外一篇博客来的,谢谢了,贴过来,如果介意的话我就删掉 https://blog.csdn.net/weixin_44164153/article/details/104486676?fps=1&locationNumCodeforces Round #622 C1. Skyscrapers (easy version)
题目链接: C1. Skyscrapers (easy version) 题目描述: 有一行数,使得整个序列满足 先递增在递减(或者只递增,或者只递减) ,每个位置上的数可以改变,但是最大不能超过原来的值。 最后找到满足这样的序列并且满足 这种方案 所有数加起来 和 是最大的。 考察点 : 贪心,对数据范围的掌CF1313C2 Skyscrapers (hard version)
思路: 使用单调栈。 实现: 1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long ll; 4 const int N = 500005; 5 ll a[N], l[N], r[N]; 6 int main() 7 { 8 int n; 9 while (cin >> n) 10 { 11 stack<int> st; 12「CF1313C Skyscrapers」
题目大意 给出一个长度为 \(N\) 的序列 \(a\) 需要构造出一个长度为 \(N\) 的序列 \(h\) 使得 \(\forall i \in [1,N]\),\(\nexists \forall j \in [1,i),k \in (i,N],h_j > h_i < h_k\),求出并输出 \(\sum_{i=1}^{N}h_i\) 达到最大值时的 \(h\) 序列. 再简化一下题意,就是需要找