bzoj1047: [HAOI2007]理想的正方形

来源:互联网 发布:一起阅读软件下载 编辑:程序博客网 时间:2024/05/15 13:48

传送门
我们可以用二维ST表记录下2^i*2^i的矩阵最值,暴力枚举即可pass。
注意,本题略卡内存

uses math;var  ma,mi:array [0..1005,0..1005,0..10] of longint;  n,m,a,i,j,k,tt,d,ans,maxx,minn:longint;begin  read(n,m,a);  for i:=1 to n do    for j:=1 to m do read(ma[i,j,1]);  for i:=1 to n do    for j:=1 to m do mi[i,j,1]:=ma[i,j,1];  tt:=trunc(ln(a)/ln(2)+1e-9);  for i:=2 to tt+1 do    begin      d:=1 shl (i-2);      for j:=1 to n-1 shl (i-1)+1 do        for k:=1 to m-1 shl (i-1)+1 do          begin            ma[j,k,i]:=max(max(ma[j,k,i-1],ma[j,k+d,i-1]),max(ma[j+d,k,i-1],ma[j+d,k+d,i-1]));            mi[j,k,i]:=min(min(mi[j,k,i-1],mi[j,k+d,i-1]),min(mi[j+d,k,i-1],mi[j+d,k+d,i-1]));          end;    end;  d:=1 shl tt;  ans:=maxlongint;  for i:=1 to n-a+1 do    for j:=1 to m-a+1 do      begin        maxx:=max(max(ma[i,j,tt+1],ma[i,j+a-d,tt+1]),max(ma[i+a-d,j,tt+1],ma[i+a-d,j+a-d,tt+1]));        minn:=min(min(mi[i,j,tt+1],mi[i,j+a-d,tt+1]),min(mi[i+a-d,j,tt+1],mi[i+a-d,j+a-d,tt+1]));        ans:=min(ans,maxx-minn);      end;  write(ans);end.
0 0
原创粉丝点击