YC309A [ 20240627 CQYC省選模擬賽 T1 ] 或(or)

cxqghzj發表於2024-07-03

題意

給定一個可重集 \(S\),求所有的字首的集合的代價。

定義一個集合的代價為:

\[\max_x \left( (\max_i b_i \lvert x) - (\min_i b_i \lvert x)\right) \]

\(n \le 10 ^ 6, V \le 2 \times 10 ^ 6\)

Sol

首先看到這個式子直接開劃。

稱較大的數為 \(b_i\),較小的數為 \(b_j\)

直接考慮二進位制位,發現 \(x\) 會取到所有 \(b_{j, k} = 1\)\(b_{i, k} = 0\) 的位置上。

我們發現答案的值域很小,集中注意力,思考答案會滿足什麼樣的性質。

事實上答案 \(ans\) 滿足 \(ans \subseteq b_i\) 以及 \(ans \subseteq \overline b_j\)

這個玩意是充要條件。

接下來就很簡單了,直接考慮維護兩個集合 \(Sx\), \(Sy\),分別表示加入 \(x \subseteq b_i\)\(y \subseteq \overline b_j\),即可。

假如一個數 \(x\) 同時出現在了兩個集合中,直接更新答案即可。

相關文章