BZOJ 1047 理想的正方形

2022-05-13 10:45:25 字數 668 閱讀 6368

bzoj 1047 傳送門

(1)先橫向用單調佇列求出每個數左邊$n$個數中的最值

(2)再縱向利用橫向的結果用單調佇列進行相同的操作

通過以上操作將$a*b$的矩陣轉化為了$(a-n+1)*(b-n+1)$的矩陣

相當於每個正方形被縮成了乙個點,而每個點的最值就代表著原正方形中的最值

tip:

1、又被$1<<27$坑了……以後還是都設為$1<<30$吧

2、將二維轉化為兩個一維的合併的思想很勁啊,和二維資料結構的處理方式很類似啊

#include using

namespace

std;

const

int maxn=1005;//

res的初始值一定要設大,如果上限為1e9則要設為(1<<30)

int q1[maxn],q2[maxn],l1,l2,r1,r2,res=1

<<30

;int

n,m,k,dat[maxn][maxn],mx[maxn][maxn],mn[maxn][maxn];

intmain()

}for(int i=k;i<=m;i++)

}printf("%d

",res);

return0;

}

BZOJ1047 理想的正方形

time limit 10 sec memory limit 162 mb submit 4137 solved 2326 有乙個a b的整數組成的矩陣,現請你從中找出乙個n n的正方形區域,使得該區域所有數中的最大值和最小值 的差最小。第一行為3個整數,分別表示a,b,n的值第二行至第a 1行每行...

BZOJ 1047 理想的正方形

看到這到題,第一反應當然是暴搜一遍,但是資料較大,暴搜鐵定過不了,自然想到進行優化,優化的方案很多,每個人的思路可能不同,在這裡我的思路僅供參考。我的想法是用單調佇列 單調棧,當然簡單的單調佇列 單調棧只適用於一行資料,對於這道題要進行一定的組合和變換。根據題目的介紹,可以大致總結出以下資訊 第一,...

BZOJ 1047 理想的正方形 單調佇列

剛開始用二維rmq直接給超記憶體了。用單調佇列可以做到o n 2 的複雜度。具體是先把每行用單調佇列處理一下。再把處理後的用列單調佇列處理下。include include include include include include include include include include...