2019 牛客暑期多校 第二场 H Second Large Rectangle (单调栈)
题目:https://ac.nowcoder.com/acm/contest/882/H
题意:一个大的01矩阵,然后现在要求第二大的全一矩阵是多少
思路:在这里我们首先学习一下另一个东西,怎么求直方图的最大面积
这个大佬写的博客非常好 https://www.cnblogs.com/linkstar/p/6139668.html 然后知道怎么求直方图面积后,我们可以先预处理,我们预处理出上到下的连续,举个栗子
1010 1010
1110 -> 2120
1111 3231
这样做有什么好处呢,这样我们就能O(1)求出上面到当前连续最长多少。然后我们现在只要枚举我的下边界是谁,然后每个下边界求一遍最大面积即可,这里要注意的是第二大有可能是最大少一行或者少一列,然后取最大值即可
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<queue>
#include<algorithm>
#include<vector>
#include<stack>
using namespace std;
const int maxn=;
stack<int>r;
int n,m,h[maxn],a[maxn],mx1,mx2;
char str[maxn];
void solve(int x)
{
if(x>mx1)
mx2=mx1,mx1=x;
else if(x>mx2) mx2=x;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<n;++i)
{
cin>>str+;
for(int j=;j<=m;++j)
{
if(str[j]-'') a[j]+=;
else a[j]=;
//h[j]=a[j];
}
r.push();
for(int j=;j<=m+;++j)
{
while(a[j]<a[r.top()])
{
int index = r.top();
r.pop();
int x=j--r.top();
int y=a[index];
solve(x*y);
solve((x-)*y);
solve(x*(y-));
}
r.push(j); }
}
printf("%d\n",mx2);
}
2019 牛客暑期多校 第二场 H Second Large Rectangle (单调栈)的更多相关文章
- 牛客多校第二场H Second Large Rectangle 单调栈or悬线法
Second Large Rectangle 题意 给出n*m的01矩阵,问由1组成的第二大的矩阵的大小是多少? 分析 单调栈(or 悬线法)入门题 单调栈 预处理出每一个点的最大高度,然后单调栈每一 ...
- 2019牛客暑期多校第二场题解FH
F.Partition problem 传送门 题意:有2n个人,分两组,每组n个,要求sum(vij)最大值. 题解:n并不大我们可以枚举每个人是在1组还是2组爆搜. 代码: #include &l ...
- 2019 牛客暑期多校 第一场 H XOR (线性基)
题目:https://ac.nowcoder.com/acm/contest/881/H 题意:求一个集合内所有子集异或和为0的长度之和 思路:首先集合内异或和,这是线性基的一个明显标志,然后我们不管 ...
- 2019 牛客多校第二场 H Second Large Rectangle
题目链接:https://ac.nowcoder.com/acm/contest/882/H 题目大意 给定一个 n * m 的 01 矩阵,求其中第二大的子矩阵,子矩阵元素必须全部为 1.输出其大小 ...
- 2019牛客暑期多校第一场题解ABCEFHJ
A.Equivalent Prefixes 传送门 题意:给你两个数组,求从第一个元素开始到第p个元素 满足任意区间值最小的元素下标相同的 p的最大值. 题解:我们可以从左往右记录到i为止每个区间的最 ...
- 【2019牛客暑期多校第一场】E题ABBA
题目链接 大致题意 有(n+m)(n + m)(n+m)个字母A和(n+m)(n + m)(n+m)个字母B,组成一个长度为 2∗(n+m)2*(n + m)2∗(n+m)的字符串,并且使得字符串中有 ...
- 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题)
layout: post title: 2019牛客暑期多校训练营(第五场)G - subsequeue 1 (一题我真的不会的题) author: "luowentaoaa" c ...
- 2019牛客暑期多校训练营(第二场)F.Partition problem
链接:https://ac.nowcoder.com/acm/contest/882/F来源:牛客网 Given 2N people, you need to assign each of them ...
- 2019牛客暑期多校训练营(第二场) H-Second Large Rectangle(单调栈)
题意:给出由01组成的矩阵,求求全是1的次大子矩阵. 思路: 单调栈 全是1的最大子矩阵的变形,不能直接把所有的面积存起来然后排序取第二大的,因为次大子矩阵可能在最大子矩阵里面,比如: 1 0 0 1 ...
随机推荐
- 在windows上使用xdmcp登陆centos,红帽linux
使用xdmcp协议可以方便的在远端登陆linux服务器,进行一些界面的操作. 修改服务器端配置. vi /etc/gdm/custom.conf 找到下面两个标签 [security] AllowRe ...
- Bootstrap 学习笔记9 标签页和工具提示插件
<ul class="nav nav-tabs"> <li class="active"><a href="#html5 ...
- [eclipse相关] 001 - 启动+运行优化
本随笔参考了其他博客内容,且在验证有效之下才或誊抄或摘录或加上自己经验组合而成. 参考博客: 1,http://zwd596257180.gitee.io/blog/2019/04/17/eclips ...
- 前缀和序列 & 差分序列
前缀和序列 所谓前缀和数组,就是从第一个元素到当前元素的和.假设这个前缀和数组为d[],原数组为a[],那么d[ i ] = a[ 1 ]+a[ 2 ]+a[ 3 ]+...+a[ i-1 ]+a[ ...
- NEO4J -模糊查询
模糊查询 match(emp) where emp.name =~'.*haha.*' return emp 现有节点创建关系 MATCH (cust:Customer),(cc:CreditCard ...
- Vue小白篇 - Vue介绍
Vue ?啥是Vue?能干嘛? vue 的介绍 Vue 是一套用于构建用户界面的 渐进式框架 ,与其它大型框架不同的是, Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层 前端三大框 ...
- python中序列类型
Python中的序列类型使用 元组类型 一旦被创建,就无法被修改. 创建 使用()或者tuple()创建 creater1=('cat', 'dog', 'tiger', 'human') creat ...
- Linux双网卡绑定bond详解
参考资料: 1.https://blog.csdn.net/shengerjianku/article/details/79221886
- openstack--all-in-one部署
安装过程 本次宿主机(即安装OpenStack的机器)的操作系统是CentOS 7.5.安装的OpenStack是目前最新的rocky版本,官方文档建议机器至少有16 GB的内存,处理器硬件虚拟化扩展 ...
- 对于一般情况X1+X2+X3+……+Xn=m 的正整数解有 (m-1)C(n-1) 它的非负整数解有 (m+n-1)C(n-1)种
对于一般情况X1+X2+X3+……+Xn=m 的正整数解有 (m-1)C(n-1) 它的非负整数解有 (m+n-1)C(n-1)种