这篇原题比较多
[十二省联考2019]异或粽子
n n n个数,两两异或得到 n ( n − 1 ) 2 \frac {n(n-1)}2 2n(n−1)个值,求前 k k k大的值的和。
O ( k log k + n log n ) O( k\log k + n\log n) O(klogk+nlogn)做法:
对于 a i ∧ a j , a i < a j a_i \wedge a_j , a_i < a_j ai∧aj,ai<aj,我们维护对于每一个 a i a_i ai和他异或值最小的 a j a_j aj,然后构成了 n n n对 ( a i , a j ) (a_i,a_j) (ai,aj),每次去除异或值最小的一对加入贡献,在 t r i e trie trie树上求关于 a i a_i ai的次小对 ( a i , a k ) (a_i,a_k) (ai,ak)加入,以此类推即可。
O ( n log 2 n ) O(n \log ^2n) O(nlog2n)做法
t r i e trie trie树上二分并 t r i e trie trie树上检验得到第 k k k小。
然后随便写写得到前 k k k小的和。
A C C o d e \mathcal AC \ Code AC Code