Cod sursa(job #1307114)

Utilizator valen.valentinValentin Valeanu valen.valentin Data 1 ianuarie 2015 10:49:02
Problema DreptPal Scor 50
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.19 kb
program dreptpal;
type
tabel=array[0..1001,0..1001] of longint;
var
t:tabel;
lim,d:array[0..1001,0..1001] of longint;
st:array[0..1001] of longint;
n,m,k,x,y,l,r,sol,i,j:longint;
f1,f2:text;
function min(a,b:longint):longint;
begin
if a<b then min:=a else min:=b;
end;
begin
assign (f1,'dreptpal.in');
assign (f2,'dreptpal.out');
reset (f1);
rewrite (f2);
readln (f1,n,m);
for i:=1 to n do
for j:=1 to m do
read (f1,t[i,j]);
for i:=1 to n do begin
x:=0; y:=0;
for j:=1 to m do begin
d[i,j]:=1;
if j<=y then d[i,j]:=min(d[i,2*x-j],2*(y-j)+1);
l:=j-d[i,j] div 2;
r:=j+d[i,j] div 2;
while (l>1) and (r<m) and (t[i,l-1]=t[i,r+1]) do begin l:=l-1; r:=r+1; d[i,j]:=d[i,j]+2;  end;
if r>y then begin x:=j; y:=r; end;
end; end;
for j:=1 to m do begin
k:=0; st[0]:=0;
for i:=1 to n do begin
while (k<>0) and (d[i,j]<=d[st[k],j]) do k:=k-1;
lim[i,j]:=i-st[k];
k:=k+1; st[k]:=i;
end;
st[0]:=n+1; k:=0;
for i:=n downto 1 do begin
while (k<>0) and (d[i,j]<d[st[k],j]) do k:=k-1;
lim[i,j]:=lim[i,j]+st[k]-i-1;
k:=k+1; st[k]:=i;
end;
end;
sol:=0;
for i:=1 to n do
for j:=1 to m do
if lim[i,j]*d[i,j]>sol then sol:=lim[i,j]*d[i,j];
writeln (f2,sol);
close (f1);
close (f2);
end.