十二省聯考2019 異或粽子

2021-10-07 08:06:35 字數 865 閱讀 1877

點此看題

方法1:

發現這道題k

kk很小,先考慮用字首和表示異或和,建出一顆tire

\text

tire

樹,然後把每個點的最優值丟進優先佇列中(因為其他值沒有這個值優),然後依次取出,再把次大值塞進去。由於每個區間會被統計兩次,所以我們找2k2k

2k次,最後把答案除以2

22即可。

方法2:和k

kk無關的演算法,但是需要兩個log

⁡\log

log,可以康康:

#include

#include

using

namespace std;

const

int m =

500005

;#define ll long long

ll read()

int n,k,cnt=

1,siz[

30*m]

,ch[

30*m][2

];ll a[m]

,ans;

struct node

};priority_queue q;

void

ins(ll x)

siz[p]++;

}ll ask

(ll x,

int rk)

return ans;

}signed

main()

);while

(k--))

;}printf

("%lld\n"

,ans/2)

;}

十二省聯考 2019 異或粽子

題目鏈結 演算法 首先把字首異或和統計出來,再將得到的每乙個字首異或和 包括pre 0 0 塞進字典樹中,接下來有乙個貪心的思路 每當我拿著其中乙個異或和的值時,我在字典樹中盡可能找二進位制高位與其對應的位不相同的異或和,這樣兩者異或運算後,所得值最大。所以我們有了這樣乙個思路,對於每乙個pre i...

十二省聯考2019 異或粽子

其實和超級鋼琴那個題思路挺像的,就是我們弄乙個二元組,乙個pos,乙個sum。求一下字首異或和,然後在它pos前面的01trie裡面查詢第k大即可。如下 luogu judger enable o2 include include include include include include de...

十二省聯考2019 異或粽子

給出乙個序列 定義乙個區間 的價值為 到 的所有數的異或和,價值前 大的區間的價值和 我們記 表示前 個數的異或和,那麼乙個區間 的價值就是 然後考慮將 插入到乙個可持久化 中,然後用堆維護每個 所能得到的最大值,然後依次取出前 項,每次取出後再在可持久化 上面刪掉乙個數就好了 created ti...