題意
給定一個可重集 \(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\) 同時出現在了兩個集合中,直接更新答案即可。