洛谷P2216 理想的正方形 單調佇列

2021-09-26 16:34:30 字數 1039 閱讀 5766

給出乙個n×m

n×mn×

m的矩陣,現在要你從裡面找出乙個k×k

k×kk×

k的矩陣,使得這個矩陣的最大值減去最小值最大。n,m

≤1e3

n,m\leq1e3

n,m≤1e

3。如果只是乙個序列,維護長度為k

kk的區間的最大值減去最小值。直接用兩個單調佇列分別維護這個滑動視窗即可。那麼要維護乙個矩形k×n

k×nk×

n的矩形的最大值和最小值,我們可以把每個k×1

k×1k×

1的矩形壓縮成乙個點,最大值就是其中的最大值,最小值就是其中的最小值。

直接暴力求仍然是o(n

mk

)o(nmk)

o(nmk)

的,不如對每一列用單調佇列預處理出這一段的最大值和最小值。這樣時間複雜度就是o(n

m)

o(nm)

o(nm)的。

#includeusing namespace std;

typedef long long ll;

const int inf=0x3f3f3f3f;

const ll inf=long_long_max;

const int n=1e3+7;

int mp[n][n];

int ma[n][n],mi[n][n];

int qmax[n],qmin[n];

int ma[n],mi[n];

int h1=1,t1=0;

int h2=1,t2=0;

int tot=0;

int main()

} for(int j=1;j<=m;j++)

} }for(int i=1;i<=tot;i++)

int h1=1,t1=0;

int h2=1,t2=0;

for(int j=1;j<=m;j++)

} }printf("%d\n",ans);

return 0;

}

洛谷P2216 理想的正方形

題目 有可以直接找 maxn i j t 為 i,j 為左下角長度為t的正方形內的最大值。然後可以有以下轉移 maxn i j t max maxn i 1 j t 1 maxn i j t 1 maxn i j 1 t 1 maxn i 1 j 1 t 1 然後考慮滾動陣列,最後答案直接列舉即可。...

洛谷P2216 理想的正方形 單調佇列

有乙個n m n times m n m的整數組成的矩陣,現請你從中找出乙個k k k times k k k的正方形區域,使得該區域所有數中的最大值和最小值的差最小。樸素的想法是直接暴力列舉區間,然後列舉其中的每一位。時間複雜度o n m k2 o nm times k 2 o nm k 2 另一...

P2216 HAOI2007 理想的正方形()

題目鏈結 有乙個a乘b的整數組成的矩陣,現請你從中找出乙個nn的正方形區域,使得該區域所有數中的最大值和最小值的差最小。輸入輸出格式 輸入格式 第一行為3個整數,分別表示a,b,n的值 第二行至第a 1行每行為b個非負整數,表示矩陣中相應位置上的數。每行相鄰兩數之間用一空格分隔。輸出格式 僅乙個整數...