求助
查看原帖
求助
563069
UQAQU楼主2024/8/27 17:14
#include<bits/stdc++.h>
#define ll long long int
using namespace std;
const int N=1e6+7;
int a[2500][2500];
int l[2500][2500],r[2500][2500],u[2500][2500];
int lm[2500][2500],rm[2500][2500];
int main()
{
	int n,m,ans1=0,ans2=0;
	cin>>n>>m;
	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			cin>>a[i][j];
			l[i][j]=1,r[i][j]=1;
			u[i][j]=1;
			lm[i][j]=1,rm[i][j]=1;
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=2;j<=m;j++){
			if (a[i][j-1]!=a[i][j]){
				l[i][j]=l[i][j-1]+1;
				lm[i][j]=l[i][j];
			}
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=m-1;j>=1;j--){
			if (a[i][j]!=a[i][j+1]){
				r[i][j]=r[i][j+1]+1;
				rm[i][j]=r[i][j];
			}
		}
	}
	for (int i=1;i<=n;i++){
		for (int j=1;j<=m;j++){
			if (i!=1 && a[i][j]!=a[i-1][j]){
				lm[i][j]=min(lm[i-1][j],l[i][j]);
				rm[i][j]=min(rm[i-1][j],r[i][j]);
				u[i][j]=u[i-1][j]+1;
			}
			int k1=rm[i][j]-lm[i][j]+1;
			int k2=min(k1,u[i][j]);
			ans1=max(ans1,k2*k2);
			ans2=max(ans2,k1*u[i][j]);
		}
	}
	cout<<ans1<<endl;
	cout<<ans2<<endl;
    return 0;
}
2024/8/27 17:14
加载中...