x與x所儲存的分別是1×n的長方形內的最大值,最小值。x[i][j]儲存第i行第jj+n-1列的長方形中的最大值。同理,x[i][j]儲存第i行第jj+n-1列的長方形中的最小值。
這時再對這兩個陣列的每一列上的值進行維護,將x中每個區間的的最大值用y維護,將x中的每個區間的最小值用y維護。那麼y[i][j]儲存x中第ii+n-1行第j列的長方形的最大值。同理y[i][j]儲存x中第ii+n-1行第j列的長方形的最小值。
發現都可以用單調佇列維護
#include using namespace std;
int n,m,k,head,head,tail,tail,ans;
int a[1001][1001],q[1001],q[1001];
int x[1001][1001],x[1001][1001];
int y[1001][1001],y[1001][1001];
int main()
}for(int i=1; i<=m-k+1; i++)
}ans=0x3f3f3f3f;
for(int i=1; i<=n-k+1; i++)
for(int j=1; j<=m-k+1; j++)
ans=min(ans,y[i][j]-y[i][j]);
printf("%d\n",ans);
return 0;
}
HAOI 2007 理想的正方形
有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值的差最小。輸入格式 第一行為3個整數,分別表示a,b,n的值 第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。輸出格式 僅乙個整數,為a b矩陣中所有 ...
HAOI2007 理想的正方形
時間限制 10 sec 記憶體限制 162 mb 有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值 的差最小。第一行為3個整數,分別表示a,b,n的值第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每 行相鄰兩數之間用一空格分隔。...
HAOI2007 理想的正方形
有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值的差最小.第一行為3個整數,分別表示a,b,n的值第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數.每行相鄰兩數之間用一空格分隔.100 的資料2 a,b 1000,n a,n b,n...