Pagini recente » Cod sursa (job #152141) | Cod sursa (job #269643) | Cod sursa (job #1833416) | Cod sursa (job #235244) | Cod sursa (job #712195)
Cod sursa(job #712195)
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxn 1011
int n, m, sol, lps, st0, center, mright, left, right;
int v[maxn][maxn], d[maxn][maxn];
int st[maxn], pz[maxn];
int main()
{
freopen("dreptpal.in", "r", stdin);
freopen("dreptpal.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i=1; i<=n; ++i)
for(int j=1; j<=m; ++j)
scanf("%d", &v[i][j]);
for(int i=1; i<=n; ++i)
{
center=mright=0;
for(int j=1; j<=m; ++j)
{
if(j<=mright)
d[i][j]=min(d[i][2*center-j], 2*(mright-j)+1);
else
d[i][j]=1;
left=j-d[i][j]/2;
right=j+d[i][j]/2;
while(v[i][left-1]==v[i][right+1] && left>1 && right<m)
{
--left;
++right;
d[i][j]+=2;
}
if(right>mright)
{
center=j;
mright=right;
}
}
}
sol=n;
for(int i=1; i<=m; ++i)
{
st0=0;
memset(st, 0, sizeof(st));
memset(pz, 0, sizeof(pz));
d[n+1][i]=0;
for(int j=1; j<=n+1; ++j)
{
lps=j;
while(d[j][i]<st[st0])
{
sol=max(sol, (j-pz[st0])*st[st0]);
lps=pz[st0];
--st0;
}
if(d[j][i]==st[st0])
continue;
st[++st0]=d[j][i];
pz[st0]=lps;
}
}
printf("%d\n", sol);
return 0;
}