CF1288D

题目描述

给定 \(n\) 个数组 \(a_1, a_2, \ldots, a_n\),每个数组恰好包含 \(m\) 个整数。我们用 \(a_{x, y}\) 表示第 \(x\) 个数组的第 \(y\) 个元素。

你需要选择两个数组 \(a_i\)\(a_j\)\(1 \le i, j \le n\),允许 \(i = j\))。之后,你将得到一个新的数组 \(b\),它包含 \(m\) 个整数,对于每个 \(k \in [1, m]\),有 \(b_k = \max(a_{i, k}, a_{j, k})\)

你的目标是选择 \(i\)\(j\),使得 \(\min\limits_{k=1}^{m} b_k\) 的值尽可能大。

\(1 \le n \le 3 \cdot 10^5\)\(1 \le m \le 8\)

正解

求最小值最大,一定是二分,发现 m 很小,考虑状压。对于 check 的每一个 mid,将大于等于它的记为 1,其余为 0。把每一排压缩成一个数,只要有两个数按位或之后是二进制下的全一串就返回 1,由于 m 最大值为 8,所以状压后只有 256 种情况,开个桶判断即可。

posted @ 2026-07-19 14:26  KarS123  阅读(3)  评论(0)    收藏  举报