Pagini recente » Cod sursa (job #952789) | Cod sursa (job #93470) | Cod sursa (job #406809) | Cod sursa (job #2969480) | Cod sursa (job #637684)
Cod sursa(job #637684)
#include<stdio.h>
#define fsize 11000000
#define maxn 1005
FILE*f=fopen("dreptpal.in","r");
FILE*g=fopen("dreptpal.out","w");
int n,m,i,j,ch,lenght,p,u,arie,best,vf;
int A[maxn],D[maxn][maxn],St[maxn];
char buff[fsize];
inline int next () {
int r = 0;
while ( buff[ch] >= '0' && buff[ch] <= '9' && ch <= lenght ){
r = r * 10 + buff[ch] - '0';
++ch;
}
++ch;
return r;
}
int main () {
lenght = fread(buff+1,1,fsize-5,f); ch = 1;
n = next(); m = next();
for ( i = 1 ; i <= n ; ++i ){
for ( j = 1 ; j <= m ; ++j ){
A[j] = next();
}
for ( j = 1 ; j <= m ; ++j ){
p = u = j;
while ( 1 ){
if ( !p || u > m || A[p] != A[u] ) break ;
if ( D[i][j] < u - p + 1 )
D[i][j] = u - p + 1;
--p; ++u;
}
}
}
for ( j = 1 ; j <= m ; ++j ){
for ( vf = 0, i = 1 ; i <= n ; ++i ){
p = St[vf];
while ( vf && D[i][j] < D[St[vf]][j] ){
arie = D[St[vf]][j] * ( p - St[vf-1] );
if ( best < arie ) best = arie;
--vf;
}
St[++vf] = i;
}
for ( p = St[vf] ; vf ; --vf ){
arie = D[St[vf]][j] * ( p - St[vf-1] );
if ( best < arie ) best = arie;
}
}
fprintf(g,"%d\n",best);
fclose(f);
fclose(g);
return 0;
}