Pagini recente » Cod sursa (job #1077257) | Cod sursa (job #776527) | Cod sursa (job #344329) | Cod sursa (job #260456) | Cod sursa (job #2312632)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("dreptpal.in");
ofstream g ("dreptpal.out");
const int nmax=1e3+3;
int n,m,k,d[nmax][nmax],v[nmax][nmax],x,y,l,r,st[nmax],lim[nmax][nmax],sol;
int main()
{
f>>n>>m;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) f>>v[i][j];
}
for(int i=1;i<=n;++i)
{
x=y=0;
for(int j=1;j<=m;++j)
{
d[i][j]=1;
if(j<=y) d[i][j]=min(d[i][2*x-j],2*(y-j)+1);
l=j-d[i][j]/2;
r=j+d[i][j]/2;
while(l>1&&r<m&&v[i][l-1]==v[i][r+1])
{
--l;
++r;
d[i][j]+=2;
}
if(r>y)
{
x=j;
y=r;
}
}
}
for(int j=1;j<=m;++j)
{
k=0;
st[0]=0;
for(int i=1;i<=n;++i)
{
while(k&&d[i][j]<=d[st[k]][j]) --k;
lim[i][j]=i-st[k];
++k;
st[k]=i;
}
st[0]=n+1;
k=0;
for(int i=n;i>=1;--i)
{
while(k&&d[i][j]<d[st[k]][j])
--k;
lim[i][j]+=st[k]-i-1;
++k;
st[k]=i;
}
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) sol=max(sol,lim[i][j]*d[i][j]);
}
g<<sol;
return 0;
}