
单调栈
文章平均质量分 72
cillyb
这个作者很懒,什么都没留下…
展开
-
单调栈
单调栈: 顾名思义就是在入栈时遵循单调原则,可以求出一个元素向左(或向右)所能扩展到的最大长度,并不是说在这一段区间内是单调的,而是保证在该区间内该元素一定是最大或最小; poj2796点击打开链接 大意:给一数组,求使得某段区间所有数之和乘上该区间中的最小值的值最大,找到这个最小值。 思路:求出每个点能延伸到两边的最远 #include #include #i原创 2016-07-26 21:16:29 · 833 阅读 · 0 评论 -
Educational Codeforces Round 23 D. Imbalanced Array(单调栈或RMQ+二分)
题意: imbalance值:一段区间中最大值与最小值之差 给你一个数组(n 思路:首先想到RMQ,nlogn预处理,但是还得n^2跑一下所有区间,显然不行。 大神的思路: 从每个数可作为最大值被计算次数Maxki和最小值计算次数Minki入手,答案就是sum(Maxki*num[i]-Minki*num[i]) 那么如何计算Maxki和Minki呢?原创 2017-07-05 23:12:30 · 357 阅读 · 0 评论 -
Codeforces Round #305 (Div. 1) B. Mike and Feet(单调栈)
题意:给定一个长度为n(n 思路:ans[i]表示长度为i区间的答案,我们可以知道如果i=ans[j],所以可以用长度大的区间答案去更新长度小的,所以对于每个元素,只要找到他能覆盖的最大区间长度,然后只更新这个长度的答案即可,最后再整体用长度大的更新小的一次。求每个元素他能贡献的最大的长度可以用单调栈。 代码: #include using namespace std; co原创 2017-10-09 16:13:32 · 308 阅读 · 0 评论 -
51nod 1158 全是1的最大子矩阵
题意:给出1个M*N的矩阵M1,里面的元素只有0或1,找出M1的一个子矩阵M2,M2中的元素只有1,并且M2的面积是最大的。输出M2的面积。 思路:单调栈最基础的应用是给你一排高度计算最大矩形面积,现在这题只要枚举每一行作为底,每一列为前(上)缀和,每次求下能形成的最大面积即可。 代码: #include using namespace std; const int maxn原创 2017-10-24 18:56:21 · 418 阅读 · 0 评论