51nod 1437:迈克步 单调栈基础题】的更多相关文章

1437 迈克步 题目来源: CodeForces 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题  收藏  取消关注 有n只熊.他们站成一排队伍,从左到右依次1到n编号.第i只熊的高度是ai. 一组熊指的队伍中连续的一个子段.组的大小就是熊的数目.而组的力量就是这一组熊中最小的高度. 迈克想知道对于所有的组大小为x(1 ≤ x ≤ n)的,最大力量是多少. Input 单组测试数据. 第一行有一个整数n (1 ≤ n ≤ 2×10^5),表示熊的数目. 第二…
利用单调栈高效的求出,一个数a[i]在哪个区间内可作为最小值存在. 正向扫描,求出a[i]可做为最小值的区间的左边界 反向扫描,求出a[i]可作为最小值的区间的右边界 r[i] - l[i] +1 就是a[i]可作为最小值的区间的 最大长度 我们知道:长度为len的区间,包含长度为len-1的区间 所以最后,需要逆向[确保无后效性]更新答案数组,保留最大值. #include<stdio.h> #include<math.h> #include<cstring> #in…
有n只熊.他们站成一排队伍,从左到右依次1到n编号.第i只熊的高度是ai. 一组熊指的队伍中连续的一个子段.组的大小就是熊的数目.而组的力量就是这一组熊中最小的高度. 迈克想知道对于所有的组大小为x(1 ≤ x ≤ n)的,最大力量是多少. Input 单组测试数据. 第一行有一个整数n (1 ≤ n ≤ 2×10^5),表示熊的数目. 第二行包含n个整数以空格分开,a1, a2, ..., an (1 ≤ ai ≤ 10^9),表示熊的高度. Output 在一行中输出n个整数,对于x从1到n…
1657: [Usaco2006 Mar]Mooo 奶牛的歌声 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 961  Solved: 679[Submit][Status][Discuss] Description Farmer John's N (1 <= N <= 50,000) cows are standing in a very straight row and mooing. Each cow has a unique height…
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1437 题意: 思路: 单调栈题.求出以每个数为区间最大值的区间范围即可. #include<iostream> #include<algorithm> #include<cstring> #include<cstdio> #include<vector> #include<stack> #include<…
题目链接:https://vjudge.net/problem/POJ-3250 题意:求序列中每个点右边第一个>=自身的点的下标. 思路:简单介绍单调栈,主要用来求向左/右第一个小于/大于自身的下标,直接求的话复杂度为O(n2),而单调栈只有O(n),利用好单调栈十分有用.一个元素向左遍历的第一个比它小的数的位置就是将它插入单调栈时栈顶元素的值,若栈为空,则说明不存在这么一个数.然后将此元素的下标存入栈,就能类似迭代般地求解后面的元素. 单调栈的本质是,当一个数a在另一个数b前面且比b大,那么…
我实在是太菜了啊啊啊啊啊 到现在连个单调栈都不会啊啊啊 写个经典题 #include<cstdio> #include<algorithm> #include<cstring> #define ll long long using namespace std; ll dp1[],dp2[]; ll h[]; int main() { ll n; while(scanf("%d",&n)!=EOF&&n){ memset(h,,…
一,自己思考下 1,先自己思考下 N个矩形,排成一排,现在希望用尽量少的海报去cover住它们. 2,不懂. 着实不懂. 3,分析下,最优性问题对吧,然后就每什么想法了.. 虽然肯定和单调栈和单调队列有啥关系来着. 二,听课 1,由图观察得知,至少有一栋楼是被完全覆盖的 2,覆盖的楼不整齐的话必然不优,这人费曼肯定没学,好!! 3,f[i]表示将第i栋楼完全覆盖,并以该房屋的高度将广告向左延申的最大距离 为啥向左,就是我们来的方向呢>因为左右对称?? 4,什么倒着左边右边也一样? 从左往右一遍,…
Feel Good Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 11626   Accepted: 3212 Case Time Limit: 1000MS   Special Judge Description Bill is developing a new mathematical theory for human emotions. His recent investigations are dedicated…
Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows' heads. Each cow i has a specified heig…
题目链接 先利用单调栈or其他方法找到一个元素g[i]作为最小值的区间,设为[L, R]. 那么长度为R-L+1的组的最大值ans=max(ans,g[i]).但是有一个问题: 比如6这个元素是长度为3的组的最大值,长度为2的最大值之前更新到为4,那么实际上长度为2的最大值是多少呢? 自然是6,因为肯定6存在于长度为2的组. 于是:求得所有元素作为最小值的组的长度后,更新每个长度的最大值.然后从长度最大的组往长度小的刷新,因为:能在长度大的做最小元素,也能在长度小的组做最小元素. 所以得到ans…
考虑一个点作为最小值的区间$[L[i], R[i]]$ 那么这个区间的所有含$i$的子区间最小值都是$v[i]$ 因此,用单调栈求出$L[i], R[i]$后,对$R[i] - L[i] + 1$这个长度打一个$v[i]$的标记 之后,统计后缀最大值就能得出答案 注:不加输出优化会$T$ 复杂度$O(n)$,暂居$rk1$ #include <cstdio> #include <iostream> using namespace std; extern inline char gc…
Largest Rectangle in a Histogram Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 22968    Accepted Submission(s): 7175 Problem Description A histogram is a polygon composed of a sequence of rect…
思路: 对于这个高度往左能延伸最远x,往右能延伸最远y,(x+1+y)*w; 利用单调栈就行了: #include <cstdio> #include <stack> #include <iostream> #include <string.h> #include <algorithm> using namespace std; typedef long long LL; const int N=5e4+10; struct asd{ LL pr…
参考博客https://www.cnblogs.com/tham/p/8038828.html 例题  poj 2823 Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 67137   Accepted: 19061 Case Time Limit: 5000MS Description An array of size n ≤ 106 is given to you. There is a…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1657 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ; int n,h[N],c[N],q[N],he,tl,cnt[N],ans; int rdn() { ;;char ch=getchar(); ;ch=g…
题意:给定一个序列,需要找出某个子序列S使得Min(a[i])*Σa[i] (i属于S序列)最大 正解:单调栈 这题的暴力还是很好想的,只需3分钟的事就可以码完,以每个点拓展即可,但这样的复杂度是O(n^2)的,肯定会TLE 以暴力的思想作为基础,再进行深层次思考,考虑每个点往周围拓展的时候,都要走到最远的地方停下来,也就是说会有一个左上限,一个右上限(命名为:pre.next),不难发现再枚举5.4.3.2.1这个序列的时候,每次都要往左扫描到最左边,显然这是做了重复的事情,于是机智的我马上想…
[BZOJ4237]稻草人(CDQ分治,单调栈) 题面 BZOJ 题解 \(CDQ\)分治好题呀 假设固定一个左下角的点 那么,我们可以找到的右下角长什么样子??? 发现什么? 在右侧是一个单调递减的东西 那么,对于每一个已经固定好的左下角 我们可以通过单调栈来维护答案 既然只有左下角对右上角会产生贡献 那么,按照\(x\)轴排序之后可以\(CDQ\)分治 \(CDQ\)分治怎么搞? 如果在上面的基础上多了几个点.. 那几根棕色的线链接的连是不能贡献答案的 我们来看看: 这些点的\(y\)轴都在…
[BZOJ5502][GXOI/GZOI2019]与或和(单调栈) 题面 BZOJ 洛谷 题解 看到位运算就直接拆位,于是问题变成了求有多少个全\(0\)子矩阵和有多少个全\(1\)子矩阵. 这两个操作本质就是一样的,不妨考虑有多少个全\(1\)子矩阵. 预处理出每个元素向上能够找的最多的\(1\)的个数,对于每一行从做往右扫一遍,拿一个单调栈维护一下,这样子就可以计算出以每个元素为右下角时的贡献了. 时间复杂度\(O(n^2logV)\),在BZOJ上因为常数太大T了QwQ. #include…
题目描述 Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants to count the number of other cows that can see the top of other cows' heads. Each cow i has a specified…
[BZOJ2228][ZJOI2011]礼物(单调栈) 题面 BZOJ 洛谷 题解 如果这个玩意不是一个三维立方体,而是一个二维的矩形,让你在里面找一个最大正方形,那么全世界都会做. 丢到三维上?似乎区别也不是很大啦. 我们先把每一层一片一片的剖开考虑,预处理以某个位置为左上角的最大正方形边长.这个很容易求,可以用单调队列做到\(O(pqr)\).接下来枚举某个左上角,把在每一层上的这个边长全部扣下来,形成一个序列.那么要求的就是最小值乘以选择的长度的最大值.这个东西显然还是可以单调队列求. 那…
[BZOJ4826][HNOI2017]影魔(扫描线,单调栈) 题面 BZOJ 洛谷 Description 影魔,奈文摩尔,据说有着一个诗人的灵魂.事实上,他吞噬的诗人灵魂早已成千上万.千百年来,他收集了各式各样 的灵魂,包括诗人.牧师.帝王.乞丐.奴隶.罪人,当然,还有英雄.每一个灵魂,都有着自己的战斗力,而影魔,靠 这些战斗力提升自己的攻击.奈文摩尔有 n 个灵魂,他们在影魔宽广的体内可以排成一排,从左至右标号 1 到 n. 第 i个灵魂的战斗力为 k[i],灵魂们以点对的形式为影魔提供攻…
正解:单调栈+线段树 解题报告: 传送门! 首先考虑不修改的话就是个单调栈板子题昂,这个就是 然后这题的话,,,我怎么记得之前考试好像有次考到了类似的题目昂,,,?反正我总觉着这方法似曾相识的样子,,,想不起来辣,慢慢落实之前考题的时候再说趴QAQ 然后具体看到这道题的话,就是用个线段树,每个节点记录这个节点的最长序列和最大斜率 然后对于左右两个子节点合并 首先左节点直接保存下来就好 然后右节点,可以继续分半递归查找找到能合并的最左边节点 挺好理解的就是不太好表示,具体看代码算了QAQ 这样修改…
Bad Hair Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 24112   Accepted: 8208 Description Some of Farmer John's N cows (1 ≤ N ≤ 80,000) are having a bad hair day! Since each cow is self-conscious about her messy hairstyle, FJ wants…
Description 给一个01矩阵, 求出最大的01交错的正方形和最大的01交错的矩阵 Solution 用动态规划求出最大的正方形, 用单调栈求出最大的矩阵. 在这里仅介绍求出最大正方形(求最大矩阵 = 单调栈裸题  传送门 : 不会单调栈的同学可以去学 定义数组$f[ i ][ j ]$ 为以$(i, j) $为右下角的正方形的边长 $up[ i ][ j ]$ 表示从点$(i, j)$往上 $01$交错的长度 $lef[ i ][ j ]$ 表示从点$(i, j)$往右$01$交错的长…
描述 就不需要描述了... 题目传送门 题解 被lyd的书的标签给骗了(居然写了单调队列优化dp??)  看了半天没看出来哪里是单调队列dp,表示强烈谴责QAQ w x y z  可以各自 变成a ,b c 中的几种, 那么只需要考虑矩阵由 a, b 或 c 构成就可以了. 对于每一种情况都枚举一次, 比如现在考虑由 a 构成的矩阵, 只需要将能 w y z a 的位置记为 1, 其他位置记为 0 ,然后找面积最大的 由 1 组成的矩阵即可. 那么这题就是道 单调栈裸题了  (   不会的同学可…
题意:1e5个数围成一个环.现在要输出每个数左右第一个大于它的数的下标.若没有,则输出-1. 题解:单调栈板题.只是要把数据压入栈压两遍来模仿环.    具体分析:考虑一个递减的数列.要找左边最大的数,我们从左到右对于每一个数,只要往回枚举一步就能找到,时间复杂度为O(n): 考虑一个递增的数列.同样用暴力枚举,每次都要找到头(尾),复杂度为O(n*n); 如何优化? 我们发现在递增数列的例子中如果a[N]一直遍历到头才停止,那么只要a[N+1]>a[N],就可以直接跳过之前的n-1次遍历.…
正解:单调栈/悬线法 解题报告: ummm这题我当初做的时候一点思路也没有只会暴力出奇迹:D(啊听说暴力好像能水过去呢,,, 然后当初是看的题解,然后学了下悬线法 然后就忘了:D 然后我现在看发现看不懂辽:D #论写题解的好处:D 所以赶紧来写个题解QAQ ummm悬线法这个玩意儿会单独写个学习笔记的到时候放链接QAQ所以这里不详解了 反正这题就相当于是个最大子矩阵的玩意儿?有点悬线法板子题的意思蛤? 那如果知道悬线法就可以直接过了,好了没了感觉没太多可说的QAQ 然而这题谢总是布置在单调栈专题…
题意 题目链接 Sol 单调栈板子题.. 找到向左第一个比他大的位置,然后判断一下就可以了 #include<bits/stdc++.h> //#define int long long #define LL long long using namespace std; const int MAXN = 1e6 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '…
[BZOJ4709]柠檬(动态规划,单调栈) 题面 BZOJ 题解 从左取和从右取没有区别,本质上就是要分段. 设\(f[i]\)表示前\(i\)个位置的最大值. 那么相当于我们枚举一个前面的位置\(j\),然后找到这一段中最大的\(s_0t^2\) 但是这样子很不优秀. 我们贪心的思考一下,既然这一段最后加起来只能变成某一个\(s_0\), 那么,我们这一段开头和结尾都一定要是\(s_0\), 否则我们把结尾那些不等于\(s_0\)的单独分开一段, 这样子的答案一定不会更差,前缀同理. 因此每…