bzoj1047(單調佇列,矩陣中)

2021-07-16 14:46:32 字數 648 閱讀 9999

沒那麼難,不需要什麼二維單調佇列,其實只要改變一下順序就好

為了思路清晰,這裡採用的結構體+結構體函式寫的單調佇列

剛開始感覺不會,看hzwer的blog,上面說,題解都太麻煩,還不如手推,就沒繼續看下去,事實證明這道題回來一看就秒了,也不知道是怎麼想的。。。猜的?

其實就是一行乙個單調佇列,端點每往右移一位,就計算從上到下的情況

#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

int read()

struct aa

void clear()

void mx_insert(int x,int idx)

void mi_insert(int x,int idx)

void del(int k)

}mx[1005],mi[1005],smi,smx;//單調佇列

int a,b,n,mp[1005][1005],ans;

int main()

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

}printf("%d",ans);

return 0;

}

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

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

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 傳送門 1 先橫向用單調佇列求出每個數左邊 n 個數中的最值 2 再縱向利用橫向的結果用單調佇列進行相同的操作 通過以上操作將 a b 的矩陣轉化為了 a n 1 b n 1 的矩陣 相當於每個正方形被縮成了乙個點,而每個點的最值就代表著原正方形中的最值 tip 1 又被 1 2...