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 ...
随机推荐
- 2018-2019-2 网络对抗技术 20165205 Exp8 Web基础
2018-2019-2 网络对抗技术 20165205 Exp8 Web基础 1.原理与实践说明 1.1实践内容 Web前段HTML:能正常安装.启停Apache.理解HTML,理解表单,理解GET与 ...
- 7 Java 快速排序
快速排序(Quicksort)是对冒泡排序的一种改进. 1.基本思想 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别 ...
- android data binding jetpack V 实现recyclerview 绑定
android data binding jetpack VIII BindingConversion android data binding jetpack VII @BindingAdapter ...
- linux 之 pthread_create 实现类的成员函数做参数
在C++的类中,普通成员函数不能作为pthread_create的线程函数,如果要作为pthread_create中的线程函数,必须是static ! 在C语言中,我们使用pthread_create ...
- EDM数据营销之电商篇| 六大事务性邮件,环环相扣打造极致用户体验!
“以用户为中心”的时代,电商们致力于打造极致的用户体验,想尽各式新颖营销办法,但难免还是会出现营销断层,以至于和用户间无法达到完整的交互. 本次Focussend以邮件营销为例,聚焦用户从浏览到支付等 ...
- 作为web开发人员,你必须要知道的问题! (持续更新)
GET 和 POST 的区别 GET请注意,查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=val ...
- python 学习笔记(一):在列表、字典、集合中根据条件筛选数据
一.在列表中筛选数据 在列表中筛选出大于等于零的数据,一般通用的用法代码如下: data = [3, -9, 0, 1, -6, 3, -2, 8, -6] #要筛选的原始数据列表 result = ...
- maven的基本使用
安装: 1.下载maven http://maven.apache.org/ 2.将maven包解压并放置到安装目录 3.添加环境变量M2_HOME,path当中添加;%M2_HOME%\bin; 4 ...
- 【转】Spark History Server 架构原理介绍
[From]https://blog.csdn.net/u013332124/article/details/88350345 Spark History Server 是spark内置的一个http ...
- Python - 数据结构与算法(Data Structure and Algorithms)
入门 The Algorithms Python https://github.com/TheAlgorithms/Python 从基本原理到代码实现的Python算法入门,简洁地展示问题怎样解决,因 ...