随笔分类 - { 数据结构 { 栈 } }
摘要:题目大概就是给一个序列,问每个数右边有几个连续且小于该数的数。 用单调递减栈搞搞就是了。 1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 #define INF (1<<30) 5 #define MAXN 88888
阅读全文
摘要:题目给一个01矩阵,求最大的1子矩阵。 先用dp预处理出每一行的每一列的1能向上按连续的1延伸多少,然后枚举每一行作为子矩阵的底,那样对于每一行的答案就是POJ2559这个经典问题了。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorit
阅读全文
摘要:题目给一个由几个相连接的矩形组成的多边形,计算多边形包含的最大的矩形的面积。 要求的矩形的高一定是某一个用来组合的矩形的高;如果枚举每个矩形作为高的话,那样长就是这个矩形能向左向右继续延伸矩形的长度了。 所以这题本质也是用单调栈在O(n)计算出每个数作为最小数向左和向右能延伸的最长距离。 1 #in
阅读全文
摘要:题意:给一个非负整数序列,求哪一段区间的权值最大,区间的权值=区间所有数的和×区间最小的数。 用单调非递减栈在O(n)计算出序列每个数作为最小值能向左和向右延伸到的位置,然后O(n)枚举每个数利用前缀和O(1)计算出以这个数为最小值能得到的最大的区间权。 以前写的单调栈,三个if分支,写得繁繁杂杂的
阅读全文
摘要:比赛时没做出这题太可惜了。 赛后才反应过来这就是个中缀表达式求值,数字栈存的不是数字而是多项式。 而且,中缀表达式求值很水的,几行就可以搞定。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace
阅读全文