具体见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;
}

单调栈求最大面积(模板)相关推荐

  1. 给定点坐标求多边形面积模板

    给定点坐标求多边形面积模板 方法:利用向量叉积求三角形面积的方法,把多边形分割成若干个三角形,然后求和得到多边形面积,计算时需要注意,给定的点的顺序必须是逆时针或者顺时针. 逆时针的方向是叉积的正方向 ...

  2. 【HDOJ6957】Maximal submatrix(单调栈,最大子矩阵面积)

    1008 Maximal submatrix 题意: 给出一个n*m的矩阵,求一个面积最大的子矩阵满足子矩阵的每一列都是单调不递减的 思路: 转化为01矩阵 每个位置1代表该位是否比上面一位小,然后用 ...

  3. 差异:后缀数组(wzz模板理解),单调栈

    因为涉及到对模板的理解,所以就着代码看会好一些. 让那些坚决不颓代码的人受委屈了. 我是对着wzz的板子默写的,可能不完全一样啊. 还有代码注释里都是我个人的理解,不保证正确,但欢迎指正. 可以有选择 ...

  4. HDU-Largest Rectangle in a Histogram-1506 单调栈

    连接:http://acm.hdu.edu.cn/showproblem.php?pid=1506 题意:给一个柱状图,每个小矩形宽为1,求这个柱状图最大子矩形的面积 思路:用单调栈求出每个小矩形所能 ...

  5. 牛客小白月赛13-H(单调栈+树状数组)

    题目链接:https://ac.nowcoder.com/acm/contest/549/H 题意:给一个柱状图,包括每个矩阵的宽度和高度,求能组成的最大矩阵的面积. 思路:显然最大矩阵的高一定为n个 ...

  6. 洛谷P4147 玉蟾宫(单调栈解决)

    题目 题目链接 题目背景 有一天,小猫 rainbow 和 freda 来到了湘西张家界的天门山玉蟾宫,玉蟾宫宫主蓝兔盛情地款待了它们,并赐予它们一片土地. 题目描述 这片土地被分成 N\times ...

  7. 蒟蒻的ACM数据结构(四)-单调队列和单调栈

    单调队列和单调栈 一.概念 二.实现 三.题目 单调队列 洛谷P1886 滑动窗口 解析 单调栈 [GXOI/GZOI2019]与或和 解析 POJ3250 Bad Hair Day 解析 POJ 2 ...

  8. 后缀数组 ---- 2018~2019icpc焦作H题[后缀数组+st表+二分+单调栈]

    题目链接 题目大意: 给出nnn个数,定义f[l,r]f[l,r]f[l,r]表示 区间[l,r][l,r][l,r]的最大值,求所有 子区间的最大值的和,要求相同的子区间只能算一次 比如数列 5 6 ...

  9. 2019南昌网络赛-I(单调栈+线段树)

    题目链接:https://nanti.jisuanke.com/t/38228 题意:定义一段区间的值为该区间的和×该区间的最小值,求给定数组的最大的区间值. 思路:比赛时还不会线段树,和队友在这题上 ...

最新文章

  1. android oom 全解析
  2. 未来期间的过帐运行已申请(检查条目)
  3. 2019建中台,2020拆中台,为什么很多公司中台战略宣告“失败”?
  4. java提高篇(四)---LinkedList
  5. Gradle实战-配置环境变量
  6. MyCat双机HA高可用集群搭建_HAProxy安装和配置---MyCat分布式数据库集群架构工作笔记0028
  7. python手机版-手机版python
  8. Java-重复性代码统计第一篇
  9. 大学四年Java学习路线规划,所有私藏资料我都贡献出来了,我要是早知道就好了
  10. 怎么用计算机算lnx,ln计算(log计算器在线)
  11. 一条互联网广告多少钱?
  12. 基因组选择的几个概念
  13. SpringBoot + uniApp实现的掌上生鲜超市购物微信小程序系统 附带详细运行指导视频
  14. 时间序列中的平稳性检验之单位根检验
  15. qmail的运行程序
  16. interview for chinaPay
  17. 风口中的智慧城市:智慧的面子,数字的里子
  18. “互联网+”催生农产品线交易万亿市场
  19. 《茅山后裔》全集(叶欣周铁版),MP3完整资源下载
  20. python清除输出内容_如何只清除python输出控制台中的最后一行?

热门文章

  1. 关于设计模式的讨论(5)——模版模式(Templete)
  2. 按照特定的字符串顺序排序list
  3. 中国移动董宁:深耕区块链的第八年,我仍期待挑战丨对话MVP
  4. 企业如何降低人力成本?
  5. SSM项目的excel文件上传并添加到数据库
  6. Xcode github push 被拒 The remote repository rejected commits.
  7. 会议室怎么添加预约功能?快速解决会议室使用效率问题
  8. postgres 数据导入导出
  9. 中台风险分析-标准差的现实意义
  10. 智能投顾并非AI 投资圈开始谈论“智能泡沫”