单调栈求最大面积(模板)
具体见acwing每日一题
#include <iostream>
#include <cstring>
#include <algorithm>using namespace std;const int N = 2010;int n, m, Q, l[N], r[N], s[N][N], q[N];
int U[N], D[N], L[N], R[N];
char g[N][N];int calc(int h[], int n){int tt = 0; q[0] = 0, h[0] = -1;for(int i = 1; i <= n; i ++){while(h[q[tt]] >= h[i]) tt --;l[i] = q[tt], q[++ tt] = i;}tt = 0; q[0] = n + 1, h[n + 1] = -1;for(int i = n; i >= 1; i --){while(h[q[tt]] >= h[i]) tt --;r[i] = q[tt], q[++ tt] = i;}int res = 0;for(int i = 1; i <= n; i ++) res = max(res, h[i] * (r[i] - l[i] - 1));return res;
}void init(){// 上for(int i = 1; i <= n; i ++){for(int j = 1; j <= m; j ++)if(g[i][j] == '1') s[i][j] = s[i - 1][j] + 1;else s[i][j] = 0;U[i] = max(U[i - 1], calc(s[i], m));}// 下memset(s, 0, sizeof s);for(int i = n; i >= 1; i --){for(int j = 1; j <= m; j ++)if(g[i][j] == '1') s[i][j] = s[i + 1][j] + 1;else s[i][j] = 0;D[i] = max(D[i + 1], calc(s[i], m));}// 左memset(s, 0, sizeof s);for(int i = 1; i <= m; i ++){for(int j = 1; j <= n; j ++)if(g[j][i] == '1') s[i][j] = s[i - 1][j] + 1;else s[i][j] = 0;L[i] = max(L[i - 1], calc(s[i], n));}// 右memset(s, 0, sizeof s);for(int i = m; i >= 1; i --){for(int j = 1; j <= n; j ++)if(g[j][i] == '1') s[i][j] = s[i + 1][j] + 1;else s[i][j] = 0;R[i] = max(R[i + 1], calc(s[i], n));}
}int main(){cin >> n >> m;for(int i = 1; i <= n; i ++) cin >> g[i] + 1;init();return 0;
}
单调栈求最大面积(模板)相关推荐
- 给定点坐标求多边形面积模板
给定点坐标求多边形面积模板 方法:利用向量叉积求三角形面积的方法,把多边形分割成若干个三角形,然后求和得到多边形面积,计算时需要注意,给定的点的顺序必须是逆时针或者顺时针. 逆时针的方向是叉积的正方向 ...
- 【HDOJ6957】Maximal submatrix(单调栈,最大子矩阵面积)
1008 Maximal submatrix 题意: 给出一个n*m的矩阵,求一个面积最大的子矩阵满足子矩阵的每一列都是单调不递减的 思路: 转化为01矩阵 每个位置1代表该位是否比上面一位小,然后用 ...
- 差异:后缀数组(wzz模板理解),单调栈
因为涉及到对模板的理解,所以就着代码看会好一些. 让那些坚决不颓代码的人受委屈了. 我是对着wzz的板子默写的,可能不完全一样啊. 还有代码注释里都是我个人的理解,不保证正确,但欢迎指正. 可以有选择 ...
- HDU-Largest Rectangle in a Histogram-1506 单调栈
连接:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题意:给一个柱状图,每个小矩形宽为1,求这个柱状图最大子矩形的面积 思路:用单调栈求出每个小矩形所能 ...
- 牛客小白月赛13-H(单调栈+树状数组)
题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...
- 洛谷P4147 玉蟾宫(单调栈解决)
题目 题目链接 题目背景 有一天,小猫 rainbow 和 freda 来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成 N\times ...
- 蒟蒻的ACM数据结构(四)-单调队列和单调栈
单调队列和单调栈 一.概念 二.实现 三.题目 单调队列 洛谷P1886 滑动窗口 解析 单调栈 [GXOI/GZOI2019]与或和 解析 POJ3250 Bad Hair Day 解析 POJ 2 ...
- 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]
题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...
- 2019南昌网络赛-I(单调栈+线段树)
题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...
最新文章
- android oom 全解析
- 未来期间的过帐运行已申请(检查条目)
- 2019建中台,2020拆中台,为什么很多公司中台战略宣告“失败”?
- java提高篇(四)---LinkedList
- Gradle实战-配置环境变量
- MyCat双机HA高可用集群搭建_HAProxy安装和配置---MyCat分布式数据库集群架构工作笔记0028
- python手机版-手机版python
- Java-重复性代码统计第一篇
- 大学四年Java学习路线规划,所有私藏资料我都贡献出来了,我要是早知道就好了
- 怎么用计算机算lnx,ln计算(log计算器在线)
- 一条互联网广告多少钱?
- 基因组选择的几个概念
- SpringBoot + uniApp实现的掌上生鲜超市购物微信小程序系统 附带详细运行指导视频
- 时间序列中的平稳性检验之单位根检验
- qmail的运行程序
- interview for chinaPay
- 风口中的智慧城市:智慧的面子,数字的里子
- “互联网+”催生农产品线交易万亿市场
- 《茅山后裔》全集(叶欣周铁版),MP3完整资源下载
- python清除输出内容_如何只清除python输出控制台中的最后一行?