Pagini recente » Cod sursa (job #138645) | Cod sursa (job #2025824) | Cod sursa (job #436639) | Cod sursa (job #2803491) | Cod sursa (job #2486140)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f ("dreptpal.in");
ofstream g ("dreptpal.out");
int mak[1005][1005], vek[1005][1005];
int st[1005], dr[1005];
int pal[1005]; //nr de pal pe care le are o linie;
int n,m;
int stv[1005];
int stvv[1005];
int a[1005], b[1005];
int main()
{
f >> n >> m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
f>>mak[i][j];
for(int i=1;i<=n;++i)
{
int l=0, r=0;
int ras;
for(int j=1;j<=m;++j)
{
long long ras=2*l-j;
if(j<=r)
vek[i][j]=min(r-j, vek[i][ras]);
while(mak[i][j+vek[i][j]] == mak[i][j-vek[i][j]] && j+vek[i][j]<=m)
vek[i][j]++;
if(vek[i][j]+j>r)
{
l=j;
r=vek[i][j]+j;
}
}
}
for(int j=1; j<=n; j++)
{
for(int i=1; i<=m; i++)
{
vek[j][i]*=2;
vek[j][i]--;
// cout<<vek[j][i]<<" ";
}
// cout<<"\n";
}
int real=0;
int maxxx=0;
for(int c=1;c<=m;++c)
{
maxxx=0;
int k=1;
// int nr=0;
for(int i=0;i<=n+1;++i)
{
while(k>1 && stv[k]>=vek[i][c])
{
k--;
}
k++;
a[i]=st[k-1];
stv[k]=vek[i][c];
st[k]=i;
}
int kk=1;
//int nrk=0;
for(int i=n+1;i>=0;--i)
{
while(kk>1 && stvv[kk]>=vek[i][c])
{
kk--;
}
kk++;
b[i]=dr[kk-1];
stvv[kk]=vek[i][c];
dr[kk]=i;
}
// cout<<"col: "<<c<<"\n";
for(int i=1;i<=n;++i)
{
// cout<<i<<" st:"<<a[i]<<" dr:"<<b[i]<<"\n";
if(maxxx < (b[i]-a[i]-1)*vek[i][c])
maxxx = (b[i]-a[i]-1)*vek[i][c];
}
if(maxxx>real)
real=maxxx;
}
g<<real;
return 0;
}