bzoj5085 最大 二分 bitset

2021-08-30 02:18:53 字數 1095 閱讀 4114

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

的價值。

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

n, m ≤ 1000

題目的意思是1*1的矩陣不算子矩陣。。

最小值最大嘛,二分答案嘛。我們把》=mid的位置記為1,<=mid的位置記為0,顯然我們要找到乙個矩形四個頂點都是1

考慮用bitset,如果兩列&起來有不止兩個位置為1說明存在。這樣做是n

2log⁡n

32\frac

32n2

logn​的

當然還有從大到小插入這種套路操作,這樣是n2的

#include

#include

#include

#include

#define rep(i,st,ed) for (int i=st;i<=ed;++i)

const

int n=

1005

;int rc[n]

[n],b[n*n]

,n,m;

std:: bitset bit[n]

;bool

check

(int mid)

}rep

(i,1

,n)rep

(j,i+

1,n)

}return

false;}

intmain

(void

) std::

sort

(b+1

,b+b[0]

+1);

int size=std::

unique

(b+1

,b+b[0]

+1)-b-1;

rep(i,

1,n)

rep(j,

1,m)

int l=

1,r=size;

for(

;l<=r;

)printf

("%d\n"

, b[l-1]

);return0;

}

bzoj5085 最大 二分 暴力

題目描述 給你乙個n m的矩形,要你找乙個子矩形,價值為左上角左下角右上角右下角這四個數的最小值,要你最大化矩形的價值。輸入第一行兩個數n,m,接下來n行每行m個數,用來描述矩形 n,m 1000 輸出輸出乙個數表示答案 樣例輸入 2 21 2 3 4樣例輸出1題解 二分 暴力 首先題目問的是最小值...

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...