bzoj5085 最大 二分 暴力

2022-05-20 09:48:07 字數 755 閱讀 3174

題目描述

給你乙個n×m的矩形,要你找乙個子矩形,價值為左上角左下角右上角右下角這四個數的最小值,要你最大化矩形的價值。

輸入第一行兩個數n,m,接下來n行每行m個數,用來描述矩形

n, m ≤ 1000

輸出輸出乙個數表示答案

樣例輸入

2 21 2

3 4樣例輸出1題解

二分+暴力

首先題目問的是最小值最大,顯然二分答案,問題轉化為判斷是否存在乙個子矩形,滿足四個角的權值大於等於mid。

考慮暴力怎麼做:列舉所有與x軸平行的線段(即同行的線段),判斷是否有兩個線段的端點橫座標相同(即列數相同)。

由於只要有任何一種線段出現次數大於等於2即可行,因此最壞情況下每一種線段也只出現了一次。

因為線段只有 $m^2$ 個,所以只需要使用嚴格的複雜度把所有線段暴力找出來即可。這樣最壞情況下時間複雜度不會超過 $o(nm+m^2)$

因此總的時間複雜度為 $o((n+m)^2\log n)$ 

#include #include #include #define n 1010

using namespace std;

int n , m , a[n][n] , c[n][n] , v[n] , tot;

bool solve(int mid)}}

return 0;

}int main()

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

return 0;

}

bzoj5085 最大 二分 bitset

給你乙個n m的矩形,要你找乙個子矩形,價值為左上角左下角右上角右下角這四個數的最小值,要你最大化矩形 的價值。第一行兩個數n,m,接下來n行每行m個數,用來描述矩形 n,m 1000 題目的意思是1 1的矩陣不算子矩陣。最小值最大嘛,二分答案嘛。我們把 mid的位置記為1,mid的位置記為0,顯然...

BZOJ5085 最大 亂搞

description 給你乙個n m的矩形,要你找乙個子矩形,價值為左上角左下角右上角右下角這四個數的最小值,要你最大化矩形的價值。sample input 2 21 2 3 4sample output 1bitset 好 n 3信仰ac include include include incl...

bzoj 5085 最大 結論題qwq

給你乙個n m的矩形,要你找乙個子矩形,價值為左上角左下角右上角右下角這四個數的最小值,要你最大化矩形 的價值。第一行兩個數n,m,接下來n行每行m個數,用來描述矩形 n,m 1000 輸出乙個數表示答案 2 21 2 3 41 這道題ljk猜了個結論 答案一定在那最大的4 n個點中 所以用一下st...