bzoj 1057 单调栈
首先我们可以枚举每个一点,然后向下一直拓展到不能拓展为止,然后向下拓展的同时我们可以算出来向左最多拓展的个数,用单调栈来维护一个上升的序列,这样就类似与悬线法找最大01子矩阵了,但是对于这题01交替来说,好多细节比较麻烦,所以我们可以采用另一种转换方法,对于一个01矩阵来说,一定满足一下两个条件中的一个:
1:矩阵中所有0的点(i,j),i与j的奇偶相同,且对于所有1点(i,j),i与j的奇偶不同。
2:矩阵中所有0的点(i,j),i与j的奇偶不同,且对于所有1点(i,j),i与j的奇偶相同。
那么我们把所有满足1条件的点标号为1,满足2条件的点标号为0,这样,我们就求出标号矩阵的01子矩阵就行了,还是使用单调栈的方法求,但是这里的最大0矩阵和最大1矩阵都有可能成为答案,所以我们先求最大1矩阵,然后将矩阵取非(!),在求一遍更新答案就好了。
至于正方形和矩形的求法是相同的,只是更新答案的方式不同,特别的,最大子方阵也可以用DP来求解,设w[i][j]为以(i,j)点为右下角的方阵的最大边长(面积),转移为w[i][j]=min(w[i-1][j-1],w[i][j-1],w[i-1][j])+1。
反思:没有考虑到DP的方阵局限性。
/**************************************************************
Problem: 1057
User: BLADEVIL
Language: C++
Result: Accepted
Time:2948 ms
Memory:48168 kb
****************************************************************/ //By BLADEVIL
#include <cstdio>
#include <algorithm>
#define maxn 2010
#define sqr(x) x*x using namespace std; int a[maxn][maxn],w[maxn],s[maxn],f[maxn][maxn],map[maxn][maxn];
int top,n,m,ans1,ans2; void calc()
{
for (int j=;j<=m;j++)
{
top=;
for (int i=;i<=n;i++)
{
int minw=i;
while (top&&s[top]>=f[i][j])
{
ans1=max(ans1,s[top]*(i-w[top]));
ans2=max(ans2,sqr(min(s[top],i-w[top])));
minw=w[top--];
}
s[++top]=f[i][j]; w[top]=minw;
}
} } int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
if ((i&)==(j&)&&a[i][j]||(i&)!=(j&)&&!a[i][j]) map[i][j]=; else map[i][j]=;
}
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (map[i][j]) f[i][j]=f[i][j-]+; else f[i][j]=;
calc();
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
map[i][j]=!map[i][j];
for (int i=;i<=n;i++)
for (int j=;j<=m;j++)
if (map[i][j]) f[i][j]=f[i][j-]+; else f[i][j]=;
calc();
printf("%d\n%d\n",ans2,ans1);
return ;
}
bzoj 1057 单调栈的更多相关文章
- [USACO06NOV]糟糕的一天Bad Hair Day BZOJ 1660 单调栈
农民John的某 N 头奶牛 (1 <= N <= 80,000) 正在过乱头发节!由于每头牛都 意识到自己凌乱不堪的发型, FJ 希望统计出能够看到其他牛的头发的牛的数量. 每一头牛 i ...
- bzoj 1057: [ZJOI2007]棋盘制作 单调栈
题目链接 1057: [ZJOI2007]棋盘制作 Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 2027 Solved: 1019[Submit] ...
- 【BZOJ】1057: [ZJOI2007]棋盘制作(单调栈)
http://www.lydsy.com/JudgeOnline/problem.php?id=1057 同某一题差不多?记不清是哪题了.. 就是每一行进行单调栈维护递增的高度,在进栈和出栈维护一下长 ...
- [BZOJ 3238] [AHOI 2013] 差异 【后缀数组 + 单调栈】
题目链接:BZOJ - 3238 题目分析 显然,这道题就是求任意两个后缀之间的LCP的和,这与后缀数组的联系十分明显. 求出后缀数组后,求出字典序相邻两个后缀的LCP,即 Height 数组. 那么 ...
- BZOJ.4826.[AHOI/HNOI2017]影魔(树状数组/莫队 单调栈)
BZOJ LOJ 洛谷 之前看\(mjt\)用莫队写了,以为是一种正解,码了3h结果在LOJ T了没A= = 心态爆炸(upd:发现是用C++11(NOI)交的,用C++11交就快一倍了...) 深刻 ...
- BZOJ.4540.[HNOI2016]序列(莫队/前缀和/线段树 单调栈 RMQ)
BZOJ 洛谷 ST表的一二维顺序一定要改过来. 改了就rank1了哈哈哈哈.自带小常数没办法. \(Description\) 给定长为\(n\)的序列\(A_i\).\(q\)次询问,每次给定\( ...
- BZOJ.4199.[NOI2015]品酒大会(后缀数组 单调栈)
BZOJ 洛谷 后缀自动机做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 显然只需要考虑极长的相同子串的贡献,然后求后缀和/后缀\(\max\)就可以了. 对于相同子串,我们能想 ...
- BZOJ.4453.cys就是要拿英魂!(后缀数组 单调栈)
BZOJ 求字典序最大,容易想到对原串建后缀数组求\(rk\). 假设当前区间是\([l,r]\),对于在\([l,r]\)中的两个后缀\(i,j\)(\(i<j\)),显然我们不能直接比较\( ...
- bzoj 4237 稻草人 - CDQ分治 - 单调栈
题目传送门 传送点I 传送点II 题目大意 平面上有$n$个点.问存在多少个矩形使得只有左下角和右上角有点. 考虑枚举左下角这个点.然后看一下是个什么情况: 嗯对,是个单调栈.但不可能暴力去求每个点右 ...
随机推荐
- ZOJ 1711 H-Sum It Up
https://vjudge.net/contest/67836#problem/H Given a specified total t and a list of n integers, find ...
- CentOS修改DNS、IP地址、网关
一.CentOS 修改DNS 修改对应网卡的DNS的配置文件 # vi /etc/resolv.conf 修改以下内容 nameserver 8.8.8.8 #google域名服务器 nameserv ...
- django 安装/部署过程
一.软件安装 1.升级linux中的python 参考“centos升级python” 2.安装apache(httpd) 3.安装django,先要安装setuptools 参考“安装dj ...
- Ubuntu 10.04 下载android 4.1.1_r4
一.安装 curl git $ sudo apt-get install curl $ sudo apt-get install git-core 二.安装repo 1.在主目录(~)建立目录 bi ...
- [洛谷P4512]【模板】多项式除法
题目大意:给定一个$n$次多项式$F(x)$和一个$m$次多项式$G(x)$,请求出多项式$Q(x),R(x)$,满足: 1. $Q(x)$次数为$n-m$,$R(x)$次数小于$m$2. $F(x) ...
- pandas模块(数据分析)------Series
pandas是一个强大的Python数据分析的工具包. pandas是基于NumPy构建的. pandas的主要功能: 具备对其功能的数据结构DataFrame.Series 集成时间序列功能 提供丰 ...
- 一些实用的JQuery代码片段收集
本文将展示50个非常实用的JQuery代码片段,这些代码能够给你的JavaScript项目提供帮助.其中的一些代码段是从jQuery1.4.2才开始支持的做法,另一些则是真正有用的函数或方法,他们能够 ...
- Linux安装cx_Oracle
安装依赖包 yum -y install gcc python-devel 确认以下变量都已经设置好了 export ORACLE_HOME=/home/oracle/app/oracle/produ ...
- 使用httpclient post请求中文乱码解决办法
使用httpclient post请求中文乱码解决办法 在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码 ...
- WizTools.org RESTClient 启动方法
关于 WizTools.org RESTClient的使用 今天分享一个很好用的测试service的工具,很好用 提供两种方法使用这个东东. 第一种方法 通过cmd命令窗口. (1)cd C:\Use ...