Pagini recente » Cod sursa (job #1623535) | Cod sursa (job #866260) | Cod sursa (job #2422211) | Cod sursa (job #2871549) | Cod sursa (job #2789282)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("dreptpal.in");
ofstream fout("dreptpal.out");
int a[1001][1001];
void pal(int s[],int n,int j)
{
if(n==0)
return;
int l[n];
l[0]=1;
int c=1;
int r=2;
int i=0;
int imirror;
int maxl=1;
int maxc=0;
int start=-1;
int end=-1;
int diff=-1;
for(i=1; i<n; i++)
{
imirror=2*c-i;
l[i]=1;
diff=r-i;
if(diff>0)
l[i]=min(l[imirror],diff);
while(((i+l[i])<n&&(i-l[i])>=0)&&(s[i+l[i]]==s[i-l[i]]))
{
l[i]++;
}
if(l[i]>maxl)
{
maxl=l[i];
maxc=i;
}
if(i+l[i]>r)
{
c=i;
r=i+l[i];
}
}
long long sum=0;
for(i=0; i<n; i++)
{
a[j][i]=l[i];
}
// fout<<sum;
}
int main()
{
int n,m;
fin>>n>>m;
int i,j;
int s[1001];
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
fin>>s[j];
}
pal(s,m,i);
}
int maxi=0;
int ar=0;
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
int lin=i;
int mini=a[i][j];
while(lin<n)
{
mini=min(a[lin][j],mini);
ar=(lin-i+1)*(mini*2-1);
lin++;
maxi=max(maxi,ar);
if(mini==1)
{
maxi=max(maxi,n);
break;
}
}
}
}
fout<<maxi;
return 0;
}