
栈
Neo__Z
这个作者很懒,什么都没留下…
展开
-
bzoj3039 玉蟾宫【单调栈】
解题思路:枚举每一行作为矩形的底,h[j]表示第j列向上延伸的最多的1,再用两个单调栈维护每列向左和向右第一个h值比它小的列l[j],r[j],那么矩形面积即是h[j]*(r[j]-l[j]-1)。可以证明最优解一定会被统计。 时间复杂度为O(n2)O(n^2)#include<bits/stdc++.h>#define ll long longusing namespace std;int原创 2017-12-18 16:15:58 · 294 阅读 · 0 评论 -
bzoj3885: [Usaco2015 Jan]Cow Rectangles【悬线法+二分】
题目大意:坐标系上给出n个点,分”H”和”G”,一个整点坐标上至多一个点。 现在求一个不包含”G”的包含尽量多”H”的子矩形,然后在保证”H”最多的情况下还要问最小面积。 输出”H”的最大数量,和保证”H”最多时的最小矩形面积,坐标范围在[0,1000]。解题思路:先用悬线法求出极大子矩阵,再二分边界,消去不含’H’的部分即可。 悬线法:对每个位置求出向上的没有障碍点的最大距离,...原创 2018-02-14 16:37:30 · 237 阅读 · 0 评论 -
bzoj3879: SvT【后缀数组+稀疏表+单调栈】
Description(我并不想告诉你题目名字是什么鬼)有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n].现在有若干组询问,对于每一个询问,我们给出若干个后缀(以其在S中出现的起始位置来表示),求这些后缀两两之间的LCP(LongestCommonPrefix)的长度之和.一对后缀之间的LCP长度仅统计一遍.Input第一行两个正整数n,m,分别表示S的长度以...原创 2018-04-11 21:00:20 · 334 阅读 · 0 评论 -
BJ模拟 矩阵【单调栈】
题目大意:给出一个n*m的01矩阵,问有多少个面积大等于k的全0子矩阵。n,m<=4000。解题思路:开始时以为用单调栈处理出以每个点为右下角的极大子矩阵算包含右下角的合法矩阵就行了,但每个点会产生O(n)个极大子矩阵,且会算重。 后来看了题解,可以加入一个高度时不计算贡献,在弹掉该高度时计算以它为高度的极大子矩阵中高度大于周围两个高度的部分的贡献,这样就是O(n2)O(n2)...原创 2018-04-24 20:20:50 · 273 阅读 · 0 评论