CF407D Largest Submatrix 3
被自己菜到自闭了/kk
既然是子矩阵,那么惯用套路为枚举矩阵上下边界,然后\(O(n)\)扫描求解.这题里要从左往右枚举右端点,然后看左端点最多能放到哪,那就对于每个数求出在上下边界中,在他左边的最右边的数的位置,然后左端点必须大于这个位置(如果在同一列那就不能包含这一列),那么合法的左边界为所选区间内左边扩展位置的最大值.每次扩展下边界,然后让多出来的这一行数更新每一列往左最多的扩展位置,这里要用到set,所以要\(O(n^3logn)\)
考虑优化,如果从下到上枚举上边界,然后记一下对于每一列下边界为\(j\)的左边最多的扩展位置,那么可以从上到下枚举下边界,然后用上一行的信息和上边界的信息更新这一个行,就可以少掉\(log\),这个过程的实现大概是开个桶记录对于某个元素的最右边的出现位置
#include<bits/stdc++.h>
#define LL long long
#define uLL unsigned long long
#define db double
using namespace std;
const int N=400+10;
const db eps=1e-5;
int rd()
{
int x=0,w=1;char ch=0;
while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*w;
}
int n,m,a[N][N],p[N][N],ans,bk[N*N];
int main()
{
//////qwq
n=rd(),m=rd();
for(int i=1;i<=n;++i)
for(int j=1;j<=m;++j)
a[i][j]=rd();
for(int i=n;i;--i)
{
for(int k=1;k<=m;++k)
{
p[i][k]=max(p[i][k-1],bk[a[i][k]]+1);
bk[a[i][k]]=k;
ans=max(ans,k-p[i][k]+1);
}
for(int k=1;k<=m;++k) bk[a[i][k]]=0;
for(int j=i+1;j<=n;++j)
{
for(int k=1,hd=1;k<=m;++k)
{
p[j][k]=a[i][k]==a[j][k]?k+1:max(p[j][k],max(bk[a[i][k]],bk[a[j][k]])+1);
p[j][k]=max(p[j][k],p[j-1][k]);
bk[a[i][k]]=bk[a[j][k]]=k;
hd=max(hd,p[j][k]);
ans=max(ans,(j-i+1)*(k-hd+1));
}
for(int k=1;k<=m;++k) bk[a[i][k]]=bk[a[j][k]]=0;
}
}
printf("%d\n",ans);
return 0;
}
CF407D Largest Submatrix 3的更多相关文章
- Largest Submatrix(动态规划)
Largest Submatrix Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others ...
- POJ-3494 Largest Submatrix of All 1’s (单调栈)
Largest Submatrix of All 1’s Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 8551 Ac ...
- hdu 2870 Largest Submatrix(平面直方图的最大面积 变形)
Problem Description Now here is a matrix with letter 'a','b','c','w','x','y','z' and you can change ...
- Largest Submatrix of All 1’s
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is the largest? By largest we m ...
- codeforces 407D Largest Submatrix 3
codeforces 407D Largest Submatrix 3 题意 找出最大子矩阵,须满足矩阵内的元素互不相等. 题解 官方做法 http://codeforces.com/blog/ent ...
- Largest Submatrix of All 1’s(思维+单调栈)
Given a m-by-n (0,1)-matrix, of all its submatrices of all 1's which is the largest? By largest we m ...
- POJ 3494 Largest Submatrix of All 1’s 单调队列||单调栈
POJ 3494 Largest Submatrix of All 1’s Description Given a m-by-n (0,1)-matrix, of all its submatrice ...
- POJ - 3494 Largest Submatrix of All 1’s 单调栈求最大子矩阵
Largest Submatrix of All 1’s Given a m-by-n (0,1)-matrix, of all its submatrices of all 1’s which is ...
- HDU 2870 Largest Submatrix (单调栈)
http://acm.hdu.edu.cn/showproblem.php? pid=2870 Largest Submatrix Time Limit: 2000/1000 MS (Java/Oth ...
随机推荐
- beta week 2/2 Scrum立会报告+燃尽图 03
此作业要求参见https://edu.cnblogs.com/campus/nenu/2019fall/homework/9956 一.小组情况 组长:贺敬文组员:彭思雨 王志文 位军营 徐丽君队名: ...
- 转载 筛子算法之golang实现求素数解析
package main import "fmt" // Send the sequence 2, 3, 4, ... to channel 'ch'. func generate ...
- Jeecg页面标签规则
1.表单字段重复校验方法 <input name="departname" class="inputxt" value="${depart.de ...
- springboot集成springcloud,启动时报错java.lang.AbstractMethodError: null
出现这个问题是springboot和springcloud的版本不匹配. 我此处使用了springboot 2.0.4.RELEASE,springcloud 使用了Finchley.SR2. 修改方 ...
- localStorage基本了解及使用
以下内容来自: https://www.cnblogs.com/st-leslie/p/5617130.html 感谢大佬的分享 一.什么是localStorage.sessionStorage 在 ...
- 移动端1px 边框
伪类+ transform .border_1px:before{ content: ''; position: absolute; top: 0; height: 1px; width: 100%; ...
- React Native中ref的用法(通过组件的ref属性,来获取真实的组件)
ref是什么? ref是组件的特殊属性,组件被渲染后,指向组件的一个引用.可以通过组件的ref属性,来获取真实的组件.因为,组件并不是真正的DOM节点,而是存在于内存中的一种数据结构,称为虚拟的DOM ...
- 解决vmware fusion + centos 7安装vmtools时提示The path "" is not a valid path to the xxx kernel headers.
近日使用VMware fushion 8 + centos 7.0时,无法使用共享功能,所以必须安装vmtools.但是安装过程中有2个错误需要解决. 1.gcc错误 Searching for GC ...
- stack smashing detected解决过程
在执行程序结束return 0 之后出现上图问题.主要原因是在程序中存在数组越界. 解决方法: 1. 查看定义的结构体内buffer大小,为4096字节 typedef struct { UINT32 ...
- Caused by: com.rabbitmq.client.AuthenticationFailureException: ACCESS_REFUSED - Login was refused using authentication mechanism PLAIN. For details see the broker logfile.的几种原因
环境:centos 7+ 1.查看用户是否存在 进入安装目录使用./sbin/rabbitmqctl list_users查看是否存在用户 比如:./usr/local/rabbitmq/rabbit ...