Pagini recente » Cod sursa (job #2549209) | Cod sursa (job #561093) | Cod sursa (job #710582) | Cod sursa (job #2123354) | Cod sursa (job #637732)
Cod sursa(job #637732)
#include<fstream>
#define fsize 7000000
#define maxn 1005
using namespace std;
ifstream f("dreptpal.in");
ofstream g("dreptpal.out");
int n,m,i,j,ch,lenght,p,u,arie,best,vf;
int A[maxn][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();
f >> n >> m;
for ( i = 1 ; i <= n ; ++i ){
for ( j = 1 ; j <= m ; ++j ){
//A[i][j] = next();
f >> A[i][j];
}
}
for ( i = 1 ; i <= n ; ++i ){
for ( j = 1 ; j <= m ; ++j ){
p = u = j;
while ( 1 ){
if ( !p || u > m || A[i][p] != A[i][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;
}
}
g << best << "\n";
f.close();
g.close();
return 0;
}